[Rails] devise name 열을 추가하고 이름으로 로그인하는 방법

8316 단어 Railsdevise

입문


devise를 사용하기 시작했을 때 빠져있던 부분이 있어서 기사에 남았어요.
※ 이 글의 전제는 devise를 도입했다는 것입니다.
가져오기 방법에 대해서는 이전 기사 [[Rails] devise의 가져오기 방법](url)에서 요약하였으니 참고하십시오.
[환경]
  • macOS Catalina 10.15.7
  • Vagrant 2.2.4 (CentOS 7.1)
  • Ruby 2.5.7
  • Rails 5.2.4.4
  • devise 4.7.3
  • 단계


    전체 절차는 다음과 같다.
    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
    
    뷰 생성이 완료되었습니다.
    여기서 시작한 일은 두 가지다.
  • 서명 화면을 편집하고name에 로그인할 수 있습니다
  • 로그인 화면을 편집하고name를 통해 로그인할 수 있습니다
  • 순서대로 보다.
    우선, 서명 화면의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 및 번개 매개변수 편집 정보

    좋은 웹페이지 즐겨찾기