5

確認が必要な登録後、私のアプリは認証されたページにリダイレクトされるため、認証は失敗し、Deviseはログインパスにリダイレクトします。

2回目のリダイレクトが原因で、登録後のフラッシュメッセージが失われます。

flash.keepログインパスにリダイレクトする前に、application_controller.rbまたはヘルパーに追加できる場所はありますか?別の方法がある場合は、このためにデバイスコントローラーをオーバーライドしないことをお勧めします。

4

3 に答える 3

5

登録後、ログイン パスへのリダイレクトが開始される前に、セッションにフラッシュ メッセージを保存します (ユーザーが未確認であるため、「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 
于 2013-04-23T14:45:43.647 に答える
0

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でうまく機能することもわかりました

于 2013-06-04T17:41:27.667 に答える
-1

デフォルトのデバイスのフラッシュ メッセージを、メッセージに伝えたい内容に変更してみませんか? ファイル内のフラッシュ メッセージを編集できdevise.en.ymlます。あなたが探しているものは下にあると思いますregistrations signed_up_but_unconfirmed

于 2013-02-21T19:38:57.003 に答える