4

我正在使用omniauthomniauth-identity通过Google、Facebook 和传统的用户名/密码进行身份验证。除了身份验证失败的情况外,我的一切工作都很好。失败时,例如输入无效密码时,omniauth 将调用/auth/failure. 我已经将它映射到一个控制器,该控制器重定向到一个适当的页面并显示一个 Flash 消息。我遇到的问题是我无法让闪光灯实际显示。示例代码:

routes.rb

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

在控制器中它调用:

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

由于omniauth正在做的任何事情和重定向的结合,我觉得闪光灯正在丢失。我知道视图代码是正确的,因为它会闪烁其他内容,例如成功登录消息。我将不胜感激有关如何调整我的示例以显示 flash 消息的建议,或有关替代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 回答