4

Google、Facebook、および従来のユーザー名/パスワードを介した認証にomniauthomniauth-identityを使用しています。認証が失敗した場合を除いて、すべてうまく機能しています。失敗すると、たとえば、無効なパスワードを入力すると、omniauthはを呼び出します/auth/failure。これを、適切なページにリダイレクトしてフラッシュメッセージを表示するコントローラーにマップしました。私が抱えている問題は、フラッシュを実際に表示できないことです。コード例:

routes.rb

match "/auth/failure" => "sessions#failure"

コントローラでは、次のように呼び出します。

def failure
  redirect_to root_url, alert: "Authentication failed, please try again."
end

omn​​iauthが実行していることとリダイレクトの組み合わせにより、フラッシュが失われているように感じます。ログインメッセージの成功など、他のものが点滅するため、ビューコードが正しいことはわかっています。フラッシュメッセージを表示するために例を微調整する方法に関する提案、または代替のomniauth障害処理メカニズムに関する提案をいただければ幸いです。ありがとう。

4

1 に答える 1

-2

私は私の最後のプロジェクトで同じ問題を抱えています。バグです。次のモンキー パッチを config/initializers/omniauth.rb に追加します。

  # Omniauth failure monkey patch
  on_failure do |env|
    message_key = env['omniauth.error.type']
    origin_query_param = env['omniauth.origin'] ? "&origin=#{CGI.escape(env['omniauth.origin'])}" : ""
    strategy_name_query_param = env['omniauth.error.strategy'] ? "&strategy=#{env['omniauth.error.strategy'].name}" : ""
    extra_params = env['omniauth.params'] ? "&#{env['omniauth.params'].to_query}" : ""
    new_path = "#{env['SCRIPT_NAME']}#{OmniAuth.config.path_prefix}/failure?message=#{message_key}#{origin_query_param}#{strategy_name_query_param}#{extra_params}"
    Rack::Response.new(["302 Moved"], 302, 'Location' => new_path).finish
  end
于 2013-02-07T05:28:18.133 に答える