[Rails] devise name 열을 추가하고 이름으로 로그인하는 방법
입문
devise를 사용하기 시작했을 때 빠져있던 부분이 있어서 기사에 남았어요.
※ 이 글의 전제는 devise를 도입했다는 것입니다.
가져오기 방법에 대해서는 이전 기사 [[Rails] devise의 가져오기 방법](url)에서 요약하였으니 참고하십시오.
[환경]
단계
전체 절차는 다음과 같다.
1.name 열 추가
2. devise.rb 설정 변경
3. 컨트롤러 편집
4. 뷰 편집
1.name 열 추가
새 마이그레이션 파일.사용자 모델에name 열을 추가하려면 다음 명령을 실행합니다.
단말
$ rails g migration add_name_to_users name:string
다음 화면을 표시하면 됩니다.단말
invoke active_record
create db/migrate/20201104152112_add_name_to_users.rb
마이그레이션 파일을 볼 때 다음과 같습니다.db/migrate/YYYYMMDDHHMMSS_add_name_to_users.rb
class AddNameToUsers < ActiveRecord::Migration[5.2]
def change
add_column :users, :name, :string
end
end
데이터베이스에 반영하기 위해 이전을 실행합니다.단말
$ rails db:migrate
아래와 같이 표시하면 됩니다.단말
== 20201104152112 AddNameToUsers: migrating ==================================
-- add_column(:users, :name, :string)
-> 0.0042s
== 20201104152112 AddNameToUsers: migrated (0.0043s) =========================
이로써name열은 사용자 모델에 추가되고 데이터베이스에 반영됩니다.2. devise.rb 설정 변경
전자 메일 대신name로 로그인하기 위해devise.rb 설정을 변경해야 합니다.(내가 예전에 반한 것은 이 변경을 하지 않았기 때문이니 잊지 말고 해라!)
app/config/initializers/devise.rb의
config.authentication_keys=[:email]의 주석 출력 취소
config.authentication_keys=[:name].
app/config/initializers/devise.rb
# 該当箇所は⌘Fで検索すると早いです。
# ==> Configuration for any authentication mechanism
# Configure which keys are used when authenticating a user. The default is
# just :email. You can configure it to use [:username, :subdomain], so for
# authenticating a user, both parameters are required. Remember that those
# parameters are used only when authenticating and not when retrieving from
# session. If you need permissions, you should implement that in a before filter.
# You can also supply a hash where the value is a boolean determining whether
# or not authentication should be aborted when the value is not present.
# config.authentication_keys = [:email] この行を下のように変更する
config.authentication_keys = [:name]
전자 메일 대신 name로 인증을 할 수 있도록 설정을 변경할 수 있습니다.3. 컨트롤러 편집
그리고 application_ucontroller.편집 rb.
controllers/application_controller.rb
class ApplicationController < ActionController::Base
before_action :configure_permitted_parameters, if: :devise_controller?
protected
def configure_permitted_parameters
devise_parameter_sanitizer.permit(:sign_up, keys: [:name])
end
end
before_action :configure_permitted_parameters, if: :devise_controller?쉽게 말하면 devise를 사용할 때 configure_를 먼저 사용해야 한다permitted_실행 매개 변수 방법을 표시합니다.방법은 아래에 정의되어 있다.
devise_parameter_sanitizer.permit(:sign_up, keys: [:name])
이것은 서명할 때name 값을 보낼 수 있음을 나타냅니다.기본적으로 이메일이나password 값을 허용합니다.
즉, devise 처리를 실행할 때 configure_permitted_파라미터 방법에 따라name의 값을 사용할 수 있다고 생각할 수 있습니다.
(protected가 무엇이라고 생각하는 사람은'rails strowing 파라미터'등으로 검색하면 행복해진다.)
4. 뷰 편집
다음 명령을 통해 devise와 관련된 보기를 만들 수 있습니다.
단말
$ rails g devise:views
단말
invoke Devise::Generators::SharedViewsGenerator
create app/views/devise/shared
create app/views/devise/shared/_error_messages.html.erb
create app/views/devise/shared/_links.html.erb
invoke form_for
create app/views/devise/confirmations
create app/views/devise/confirmations/new.html.erb
create app/views/devise/passwords
create app/views/devise/passwords/edit.html.erb
create app/views/devise/passwords/new.html.erb
create app/views/devise/registrations
create app/views/devise/registrations/edit.html.erb
create app/views/devise/registrations/new.html.erb
create app/views/devise/sessions
create app/views/devise/sessions/new.html.erb
create app/views/devise/unlocks
create app/views/devise/unlocks/new.html.erb
invoke erb
create app/views/devise/mailer
create app/views/devise/mailer/confirmation_instructions.html.erb
create app/views/devise/mailer/email_changed.html.erb
create app/views/devise/mailer/password_change.html.erb
create app/views/devise/mailer/reset_password_instructions.html.erb
create app/views/devise/mailer/unlock_instructions.html.erb
뷰 생성이 완료되었습니다.여기서 시작한 일은 두 가지다.
우선, 서명 화면의view는 app/views/devise/registrations에 있는 new입니다.html.eb이기 때문에 편집합니다.
app/views/devise/registrations/new.html.erb
<h2>Sign up</h2>
<%= form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| %>
<%= render "devise/shared/error_messages", resource: resource %>
<%# 追加 %>
<div class="field">
<%= f.label :name %><br />
<%= f.text_field :name, autofocus: true, autocomplete: "name" %>
</div>
<%# ここまで %>
<div class="field">
<%= f.label :email %><br />
<%= f.email_field :email, autofocus: true, autocomplete: "email" %>
</div>
#中略
서버/users/sign_ 시작up에 액세스합니다.이렇게 하면 서명 화면에 이름을 입력할 수 있다.
다음 로그인 화면의view는 app/views/users/sessions에 있는 new입니다.html.eb가 되니까 이걸 편집하면name로 로그인할 수 있겠지.
app/views/users/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 :email %><br />
<%= f.email_field :email, autofocus: true, autocomplete: "email" %>
<%# ここまで %>
<%# 追加 %>
<%= f.label :name %><br />
<%= f.text_field :name, autofocus: true, autocomplete: "name" %>
<%# ここまで %>
</div>
#中略
/users/sign_에서 설명한 대로 해당 매개변수의 값을 수정합니다.이상, 이름으로 로그인할 수 있습니다.
참고 문헌
이 글은 아래의 정보를 참고하여 글을 썼다.
devise 기능을 사용한 사용자 로그인 안내서와 이름 로그인
devise에서name와password만 사용하여 사용자 등록과 로그인을 하기 위해 초보자는 devise를 사용자 정의할 수 있습니다!~철저하게 차근차근~
before_action 및 번개 매개변수 편집 정보
Reference
이 문제에 관하여([Rails] devise name 열을 추가하고 이름으로 로그인하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/kiz_/items/3c0b4c00586ee272d5e9텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)