[Rails] devise 로그인 양식에 다른 항목을 추가하고 로그인 인증 조건을 변경하는 방법

3271 단어 루비Railsdevise

개요



간단하게 로그인 인증을 도입할 수 있는 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와 이메일 주소와 비밀번호가 일치하는 회원이 로그인할 수 있습니다.



이상이 됩니다.

좋은 웹페이지 즐겨찾기