LoginSignup
3
3

More than 3 years have passed since last update.

【Rails】deviseでのユーザ名ログイン機能の実装

Last updated at Posted at 2021-03-20

目標

deviseのユーザー登録/ログイン方法は、デフォルトでメールアドレスとパスワード。
これをユーザ名で登録/ログインできるように変更する。

準備

  1. deviseをインストール
    Gemfileにgem 'devise'追記 + $ bundle install

  2. 初期設定
    rails g devise:install

  3. モデル作成 *モデル名は任意(今回はUser)
    rails g devise User

  4. View作成
    rails g devise:views users
    views/usersのカスタマイズを反映するため、デフォルトのスコープを変更。
    具体的には、config.scoped_viewsをtrueに変更。

config/initializers/devise.rb
config.scoped_views = true

実装

ユーザ登録(Sign Up)

  1. ユーザ名カラムを追加 + rails db:migrate
マイグレーションファイル
  def change
    create_table :users do |t|
      t.string :email,              null: false, default: ""
      t.string :encrypted_password, null: false, default: ""

      t.string :name, null: false # null: false(=空の状態で保存させるのを防ぐ)
 # 中略
      t.timestamps null: false
    end

【注意】
nameをログイン時のキーに使用する場合(記事の最後で認証キーをnameに設定します)、ユーザーと一意に紐づけられている必要があります。
今回はバリデーションで、nameにuniqueness:trueを設定しています。

  1. ユーザ登録画面にユーザ名入力フォームを追加(views/devise/registrations/new.html.erb)
  2. ストロングパラメータを設定し、ユーザ名とemailのデータ操作を許可

*ここでemailも許可する理由は、後から認証キーをemailからnameに変更するため。

application_controller.rb
  before_action :configure_permitted_parameters, if: :devise_controller?
    # deviseの機能が使われる前に、configure_permitted_parametersを実行

  protected
  def configure_permitted_parameter
    devise_parameter_sanitizer.permit(:sign_up, keys: [:name, :email]) # sign_up時にユーザ名(+email)の操作を許可
  end

ログイン(Sign In)

  1. ログイン画面にフォームを追加(views/devise/sessions/new.html.erb)
  2. 認証キーをemail→nameに変更 *コメントアウトは外す
config/initializers/devise.rb
config.authentication_keys = [:name]
3
3
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3