確認が必要な登録後、私のアプリは認証されたページにリダイレクトされるため、認証は失敗し、Deviseはログインパスにリダイレクトします。
2回目のリダイレクトが原因で、登録後のフラッシュメッセージが失われます。
flash.keep
ログインパスにリダイレクトする前に、application_controller.rbまたはヘルパーに追加できる場所はありますか?別の方法がある場合は、このためにデバイスコントローラーをオーバーライドしないことをお勧めします。
確認が必要な登録後、私のアプリは認証されたページにリダイレクトされるため、認証は失敗し、Deviseはログインパスにリダイレクトします。
2回目のリダイレクトが原因で、登録後のフラッシュメッセージが失われます。
flash.keep
ログインパスにリダイレクトする前に、application_controller.rbまたはヘルパーに追加できる場所はありますか?別の方法がある場合は、このためにデバイスコントローラーをオーバーライドしないことをお勧めします。
登録後、ログイン パスへのリダイレクトが開始される前に、セッションにフラッシュ メッセージを保存します (ユーザーが未確認であるため、「after_ inactive _sign_up_path_for()」です)。
Devise 登録コントローラー:
class RegistrationsController < Devise::RegistrationsController
protected
def after_inactive_sign_up_path_for(resource)
# store message to be displayed after redirection to login screen
session[:registration_flash] = flash[:notice] if flash[:notice]
super
end
end
次に、ログイン要求中にこのメッセージが存在する場合は、このメッセージを表示します。Devise セッション コントローラー:
class SessionsController < Devise::SessionsController
def new
flash[:notice] = session.delete(:registration_flash) if session[:registration_flash]
super
end
end
Devise Failure App 方法論を使用して、最新のデバイスに対する @rigyt の回答を更新する
上記のリンクに示されているように、カスタム失敗アプリを作成します。
lib/devise_failure.rb :
def respond
if http_auth?
http_auth
else
# From original Devise Failure App
store_location!
if flash[:timedout] && flash[:alert]
flash.keep(:timedout)
flash.keep(:alert)
else
flash[:alert] = i18n_message
end
# Store flash temporarily in session because devise strips it
session[:login_flash] = flash.to_hash
redirect_to new_user_session_path
end
end
セッションコントローラー:
def new
flash_from_session
super
end
def flash_from_session
if session[:login_flash]
session[:login_flash].each do |arr|
flash[arr.first] = arr.last
end
session.delete(:login_flash)
end
end
これにより、フラッシュが期待どおりに設定され、セッションから削除されます。また、ピボタルのcacheable_flashでうまく機能することもわかりました
デフォルトのデバイスのフラッシュ メッセージを、メッセージに伝えたい内容に変更してみませんか? ファイル内のフラッシュ メッセージを編集できdevise.en.yml
ます。あなたが探しているものは下にあると思いますregistrations
signed_up_but_unconfirmed