タイトルのように成功したのでメモ。
まずは users テーブルに name 列を追加。
takatoh@nightschool $ rails g migration add_name_to_users name
できたマイグレーションファイルを編集。name 列にインデックスをつけてユニークにする。
add_index :users, :name, unique: true
でもってマイグレート。
takatoh@nightschool $ rake db:migrate
これでデータベースの準備は完了。
次に Devise の設定。config/initializers/devise.rb の32行目をアンコメントして :email を :name に変更。
config.authentication_keys = [ :name ]
これで、Devise はユーザー認証にメールアドレスじゃなくユーザー名を使うようになる。
Devise がユーザー名を受け付けるように configure_pergitted_parameters をオーバーライド。これは app/controllers/application_controller.rb で行う。
def configure_permitted_parameters devise_parameter_sanitizer.for(:sign_up) {|u| u.permit(:name, :email, :password, :password_confirmation, :admin)} devise_parameter_sanitizer.for(:sign_in) {|u| u.permit(:name, :password)} devise_parameter_sanitizer.for(:account_update) {|u| u.permit(:name, :email, :password, :password_confirmation, :admin)} end
あとはビューの変更だ。app/views/users/registrations/new.html.erb にユーザー名の欄を追加し、app/views/users/sessions/new.html.erb には email の欄の代わりにユーザー名の欄を作る。前者はサインアップ、後者はサインインの時に使われるテンプレート。
# 行を追加 <div><%= f.label :name %><%= f.text_field :name, autofocus: true %></div>
# :email から :name に変更 <div><%= f.label :name %><%= f.text_field :name, autofocus: true %></div>
これでひと通り終了。試してみよう。
うまくいった!
「Rails+Deviseでユーザー名でサインインできるようにする」への1件のフィードバック