【问题标题】:Omniauth Authentication Failure Callback HandlingOmniauth 认证失败回调处理
【发布时间】:2013-02-07 04:18:32
【问题描述】:

我正在使用 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 消息的建议,或有关替代全身份验证故障处理机制的建议。谢谢。

【问题讨论】:

    标签: ruby-on-rails redirect omniauth


    【解决方案1】:

    我在上一个项目中遇到了同样的问题。这是一个错误。将以下猴子补丁添加到您的 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
    

    【讨论】:

    • 谢谢。也许我误解了如何应用它,但它的行为似乎与我目前的行为没有什么不同(redirect_after_failure 来自omniauth FAQ) - 没有闪现消息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-15
    相关资源
    最近更新 更多