[Rails] devise 로그인 양식에 다른 항목을 추가하고 로그인 인증 조건을 변경하는 방법
개요
간단하게 로그인 인증을 도입할 수 있는 devise 라고 하는 gem 은 매우 편리하네요.
이번에는 devise의 로그인 양식에 다른 항목을 추가하고 로그인 인증 조건을 변경하는 방법을 소개합니다.
이미지로는 다음과 같은 느낌입니다.
그룹 ID를 추가하여 인증 시 그룹 ID를 확인합니다.
변경 전
변경 후
환경
rails 5.1.6
devise 4.5.0
전제
devise 설치됨
Staff 모델을 인증에 사용
Staff는 email, encrypted_password, group_id 등을 갖는다.
구현
템플릿 측
먼저 로그인 양식을 편집합니다. group_id의 입력 양식을 추가합시다.
파일
app/views/devise/sessions/new.html.erb
<h2>Log in</h2>
<%= form_for(resource, as: resource_name, url: session_path(resource_name)) do |f| %>
+ <div class="field">
+ <%= f.label :group_id %><br />
+ <%= f.text_field :group_id, autofocus: true, autocomplete: "group_id" %>
+ </div>
<div class="field">
<%= f.label :email %><br />
<%= f.email_field :email, autofocus: true, autocomplete: "email" %>
</div>
<div class="field">
<%= f.label :password %><br />
<%= f.password_field :password, autocomplete: "current-password" %>
</div>
<% if devise_mapping.rememberable? -%>
<div class="field">
<%= f.check_box :remember_me %>
<%= f.label :remember_me %>
</div>
<% end -%>
<div class="actions">
<%= f.submit "Log in" %>
</div>
<% end %>
<%= render "devise/shared/links" %>
모델측
그런 다음 Staff 모델에 group_id를 인증에 사용하는 구현을 추가합시다.
devise :authentication_keys
에서 입력 값을 수신하는 설정을 추가하고,self.find_first_by_auth_conditions
를 재정의하고 로그인 인증 조건 구현을 다시 씁니다.파일
app/models/staff.rb
class Staff < ApplicationRecord
acts_as_paranoid
# Include default devise modules. Others available are:
devise :database_authenticatable, #…省略
+ :authentication_keys => [:email , :group_id]
# …省略
+ # ログイン認証
+ def self.find_first_by_auth_conditions(warden_conditions)
+ conditions = warden_conditions.dup
+ login = conditions.delete(:login)
+ if login
+ where(conditions).where(["lower(email) = lower(:email) AND group_id = :group_id", { :email => email, :group_id => group_id }]).first
+ else
+ where(conditions).first
+ end
+ end
end
결과
다음과 같이 그룹 ID가 추가되어 그룹 ID와 이메일 주소와 비밀번호가 일치하는 회원이 로그인할 수 있습니다.
이상이 됩니다.
Reference
이 문제에 관하여([Rails] devise 로그인 양식에 다른 항목을 추가하고 로그인 인증 조건을 변경하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/seiyaan/items/f8f579fedf46b9b7e3f3텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)