今日はログイン周りの修正をメモ
現在はメールアドレスでのログインしかできないので、
ニックネームとメールアドレスでログインできるようにする。
db/migrate/***sorcery.core.rb
class SorceryCore < ActiveRecord::Migration def change create_table :users do |t| t.string :email, :null => false t.string :nickname, :null => false #ここを追加 t.string :crypted_password t.string :salt t.timestamps end add_index :users, :email, unique: true end end
tableにnicknameを追加して、rake db:migrate実行。
config/initializers/sorcery.rb
# --- user config --- config.user_config do |user| # -- core -- # specify username attributes, for example: [:username, :email]. # Default: `[:email]` # user.username_attribute_names = [:nickname, :email]
最後の行に、:nicknameを追加。
ついでにmodelにvalidation追加。
とりあえず、nicknameのpresence/uniquenessを追加しました。
次はフォームの編集。
<div class="field"> <%= label_tag :login %> <%= text_field_tag :login, nil, placeholder: 'ニックネームorメールアドレス', class: 'form-control' %> </div>
params[:login]をコントローラーに渡すよう設定。
次はコントローラーの編集。
app/controllers/sessions_controller.rb
def create user = login(params[:login], params[:password], params[:remember_me]) if user flash[:success] = "ログインしました!" redirect_back_or_to root_url else flash[:danger] = 'Email or password was invalid.' render :new end end
loginメソッドの第一引数は、デフォルトではparams[:email]でしたが、params[:login]を渡すようにしました。
ログイン後、トップページへ飛ぶようになっていたので、
redirect_back_or_to root_url ↓ redirect_back_or_to user
としてユーザーページに飛ぶように変更。
ログイン画面はこんな感じで。
ニックネームでログインすると…(既に「も」というニックネームを登録済み)
無事ログインできました!
とりあえず今回はここで終了。
まだ細かいところの修正をしていくので、続きは次回。