【초보자】 devise의 사용법 도입에서 설정 변경

12049 단어 루비Railsdevise

소개



공부를 위해 devise를 사용하여 로그인 주위를 만들었습니다.
기본적으로 사용자 이름, 비밀번호로 인증하지만, 이번 직원 번호, 비밀번호로 인증하도록 설정을 변경합니다.

환경



Ruby 2.5.3
Ruby on Rails 5.2.4
Devise 4.7.1

완성





bootstrap으로 외형을 정돈하고 있습니다만, 이렇게 되도록 설정을 변경해 갑니다.

구현



Gemfile
gem 'devise'
$ bundle install

● devise 설정
$ rails generate devise:install

이런 느낌의 메시지가 나옵니다.
초보자이므로 에러 메시지인가와 깜짝 놀랐습니다만, 이것이 나오면 성공입니다.
create  config/initializers/devise.rb
      create  config/locales/devise.en.yml
===============================================================================

Some setup you must do manually if you haven't yet:

  1. Ensure you have defined default url options in your environments files. Here
    is an example of default_url_options appropriate for a development environment
    in config/environments/development.rb:

    config.action_mailer.default_url_options = { :host => 'localhost:3000' }

    In production, :host should be set to the actual host of your application.

  2. Ensure you have defined root_url to *something* in your config/routes.rb.
    For example:

    root :to => "home#index"

  3. Ensure you have flash messages in app/views/layouts/application.html.erb.
    For example:

    <p class="notice"><%= notice %></p>
    <p class="alert"><%= alert %></p>

  4. You can copy Devise views (for customization) to your app by running:

    rails g devise:views

===============================================================================

● 메시지 내용
1. 신규 등록 등 인증 메일을 보낼 때 메일 문장에 있는 승인 링크 URL을 설정합니다.

config/environments/development.rb
config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }

2. 루트 설정
회원등록 후 등에 루트로 날아가는 설정이 되어 있습니다.

3. 플래시 메시지를 포함합니다. 로그인, 로그아웃 시 플래시를 표시하고 싶을 때 사용합니다. 나는 공통보기에 내장했다.

app/views/layouts/application.html.erb
<body>
 <p class="notice"><%= notice %></p>
 <p class="alert"><%= alert %></p>
</body>

4. 뷰를 사용자 정의하기 위해
$ rails g devise:views

●devise의 설정 변경

config/initializers/devise.rb
43行目あたり
認証キーは社員番号を指定
- config.authentication_keys = [:email]
+ config.authentication_keys = [:employee_number]
55行目あたり
認証キーの値は大文字小文字を区別しない
- config.case_insensitive_keys = [:email]
+ config.case_insensitive_keys = [:employee_number]
60行目あたり
空白キーを取り除く
- config.strip_whitespace_keys = [:email]
+ config.strip_whitespace_keys = [:employee_number]


● 사용자 모델 만들기
$ rails g devise user

app/models/user.rb
# 以下3つのメソッドは、user名を認証キーとするので、
# 不必要なメソッドをオーバーライドして無効化しています。

def email_required?
    false
  end

  def email_changed?
    false
  end

  def will_save_change_to_email?
    false
  end


db/migrate/date_devise_create_user.rb

class DeviseCreateUsers < ActiveRecord::Migration[5.2]
  def change
    create_table :users do |t|
      ## Database authenticatable
      t.string :employee_number,    null: false, default: ""
      t.string :encrypted_password, null: false, default: ""
## Recoverable
      t.string   :reset_password_token
      t.datetime :reset_password_sent_at

      ## Rememberable
      t.datetime :remember_created_at

      ## Trackable
      # t.integer  :sign_in_count, default: 0, null: false
      # t.datetime :current_sign_in_at
      # t.datetime :last_sign_in_at
      # t.string   :current_sign_in_ip
      # t.string   :last_sign_in_ip

      ## Confirmable
      # t.string   :confirmation_token
      # t.datetime :confirmed_at
      # t.datetime :confirmation_sent_at
      # t.string   :unconfirmed_email # Only if using reconfirmable

      ## Lockable
      # t.integer  :failed_attempts, default: 0, null: false # Only if lock strategy is :failed_attempts
      # t.string   :unlock_token # Only if unlock strategy is :email or :both
      # t.datetime :locked_at
    t.timestamps null: false
    end

     ここを変更!!
     - add_index :users, :email,      unique: true
     + add_index :users, :employee_number,      unique: true
      add_index :users, :reset_password_token, unique: true
    # add_index :users, :confirmation_token,   unique: true
    # add_index :users, :unlock_token,         unique: true
  end
end
$ rails db:migrate

● 컨트롤러 변경

application_controller.rb
class ApplicationController < ActionController::Base
  protect_from_forgery with: :exception
  before_action :configure_permitted_parameters, if: :devise_controller?

  protected

  # methodをオーバーライドする。
  def configure_permitted_parameters
    sign_up_params = [:employee_number, :password, :password_confirmation]
    sign_in_params = [:employee_number, :password, :remember_me] 

      # account_update, sign_in, sign_up, のフィールドを再定義
    devise_parameter_sanitizer.permit(:sign_up, keys: sign_up_params)
    devise_parameter_sanitizer.permit(:sign_in, keys: sign_in_params)
    devise_parameter_sanitizer.permit(:account_update, keys: account_update)
  end
 end

설정은 이것으로 끝입니다. 그리고는 view를 변경하면 완성입니다.

참고



[Rails] devise 사용법(rails5판)
Ruby on Rails 초보자가 gem Devise를 사용해 보았습니다.

좋은 웹페이지 즐겨찾기