LoginSignup
15
14

More than 5 years have passed since last update.

deviseでログイン状態が維持できない際の対応

Posted at

エラーの経緯

deviseのsign_up,sign_in時の画面遷移や条件を持たせる目的でdeviseのコントローラーをインストールしました。

しかし新規登録(sign_up)後に本来であればサインイン(ログイン)状態が維持されますが、最近動作が不安定です。

sign_inメソッドとは

sign_inメソッドはdeviseが提供する機能です。
sign_inメソッドはサインイン(ログイン)状態にします。

registrations_controller
def create
  if user.save?
     sign_in(user)
     redirect_to root_path
  end
end

そもそもですが、下記のafter_sign_up_path_forのメソッドもdeviseのメルパーメソッドになり、サインアップ後のアクション等を持たせることができます。
下記はサインアップ後のTOPページに遷移の設定としておりま下が、
ページ遷移をしなかったため、上記のcreateアクションを作り原因究明を行った経緯です。

registrations_controller
  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へ更新することで
ログイン状態は無事維持されました。

registrations_controller
def create
  if user.save?
    bypass_sign_in(user)
    redirect_to root_path
  end
end

参考にしたサイト

結構前のアップグレードだったんですね。
逆になぜ今まで使えてたんだろう。。。

15
14
0

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
15
14