読者です 読者をやめる 読者になる 読者になる

Ruby好き非エンジニアのブログ

〜Ruby on Railsの学習記録〜

ログイン周りの修正①

今日はログイン周りの修正をメモ

現在はメールアドレスでのログインしかできないので、
ニックネームとメールアドレスでログインできるようにする。

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

としてユーザーページに飛ぶように変更。

ログイン画面はこんな感じで。
f:id:Jyoko:20160827084321g:plain

ニックネームでログインすると…(既に「も」というニックネームを登録済み)
f:id:Jyoko:20160827084351g:plain

無事ログインできました!
f:id:Jyoko:20160827084353g:plain


とりあえず今回はここで終了。
まだ細かいところの修正をしていくので、続きは次回。