エラーの経緯
deviseのsign_up,sign_in時の画面遷移や条件を持たせる目的でdeviseのコントローラーをインストールしました。
しかし新規登録(sign_up)後に本来であればサインイン(ログイン)状態が維持されますが、最近動作が不安定です。
sign_inメソッドとは
sign_inメソッドはdeviseが提供する機能です。
sign_inメソッドはサインイン(ログイン)状態にします。
def create
if user.save?
sign_in(user)
redirect_to root_path
end
end
そもそもですが、下記のafter_sign_up_path_forのメソッドもdeviseのメルパーメソッドになり、サインアップ後のアクション等を持たせることができます。
下記はサインアップ後のTOPページに遷移の設定としておりま下が、
ページ遷移をしなかったため、上記のcreateアクションを作り原因究明を行った経緯です。
def after_sign_up_path_for(resource)
root_path
end
デバック
- bingding.pryを行いながらafter_sign_up_path、createアクションが動いているか確かめましたが、いずれもメソッドは呼び出されている。
- createメソッドはif user.save?の下にbinding.pryを配置
=> やはりきちんと当たっている。 - ではDBへの書き込みは?
=> きちんと新しいユーザーが書き込まれている。 - sign_upメソッドが怪しい。そもそもログインされているのか。
- ログアウトボタンを急遽簡易で作成しアクションを動かしてみる。
=> ログアウトされない。 - ログインしてるかログイン状態でないかわからない。
- before_action :authenticate_user!をコントローラーに追記。
=> ログアウトページに入れない。
ということはやはりログイン状態を維持していない。
ということで色々と試している中でターミナルが急に今まで出してこなかったエラーメッセージを吐き出しました。(こんなメッセージ的なエラーも出すんですね)
DEPRECATION WARNING: [Devise] bypass option is deprecated and it will be removed in future version of Devise.
Please use bypass_sign_in method instead.
非推奨警告:[Devise]のバイパスオプションは廃止予定であり、将来のバージョンのDeviseでは削除される予定です。
代わりにbypass_sign_inメソッドを使用してください。
つまりこれで言うバイパスオプションとはsign_inメソッドのことだな。
bypassを付ければ解決されるのか?
頼む、ログイン維持してくれ!
結果
ターミナルの通りbypass_sign_inへ更新することで
ログイン状態は無事維持されました。
def create
if user.save?
bypass_sign_in(user)
redirect_to root_path
end
end
参考にしたサイト
結構前のアップグレードだったんですね。
逆になぜ今まで使えてたんだろう。。。