ユーザー名などを追加して切り替えを行う.
カラムの追加
ユーザーモデルにユーザ名などを追加する(後々のためにfullnameとroleも追加していることに注意).roleに関しては,マイグレーションファイルを修正してデフォルト値を追加しておくことにする
【手順】
bin/rails g migration add_username_to_users username:string:uniq
bin/rails g migration add_fullname_to_users fullname:string
bin/rails g migration add_role_to_users role:string
vi db/migrate/XXXXXXXXXXXXXX_add_role_to_users.rb
(以下を追加)
class AddRoleToUsers < ActiveRecord::Migration[6.0]
def change
add_column :users, :role, :string, default: 'student'
end
end
認証手順の修正
認証手順を修正する.
【手順】
vi config/initializers/devise.rb
(以下を修正.:email → :username にする)
config.authentication_keys = [:username] # コメントアウトを外す
…(中略)…
# Configure which authentication keys …
config.case_insensitive_keys = [:username]
…(中略)…
# Configure which authentication keys …
config.strip_whitespace_keys = [:username]
ルーティングの追加
devise 用のコントローラを作成,ルーティングを指定する.
【手順】
bin/rails g devise:controllers users
vi config/routes.rb
(以下のように修正)
Rails.application.routes.draw do
#get 'home#index' # → 削除してよい
devise_for :users, controllers: {
sessions: 'users/sessions',
passwords: 'users/passwords',
registrations: 'users/registrations'
root to: 'home#index'
end
コントローラの修正
コントローラを修正する.
ログイン時にはusername, アカウント編集時にはusernameとfullnameをサニタイジング対象とする(ここに指定しないと,DB登録されない模様).
【手順】
vi app/controllers/users/sessions_controller.rb
(以下を修正,コメントアウトを外す)
class Users::SessionsController < Devise::SessionsController
before_action :configure_sign_in_params, only: [:create]
protected
def configure_sign_in_params
devise_parameter_sanitizer.permit(:sign_in, keys: [:username])
end
end
vi app/controllers/users/registrations_controller.rb
(以下を修正,before_actionは,コメントアウトを外す)
class Users::RegistrationsController
< Devise::RegistrationsController
before_action :configure_sign_up_params, only: [:create]
before_action :configure_account_update_params,
only: [:update]
protected
def configure_sign_up_params
devise_parameter_sanitizer.permit
(:sign_up, keys: [:username, :fullname])
end
def configure_account_update_params
devise_parameter_sanitizer.permit
(:account_update, keys: [:username, :fullname])
end
end
0 件のコメント:
コメントを投稿