2020年4月27日月曜日

簡易SNSを作ってみよう(4)

ユーザー名での認証に切り替える(前半)

ユーザー名などを追加して切り替えを行う.
カラムの追加
ユーザーモデルにユーザ名などを追加する(後々のために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 件のコメント:

コメントを投稿