在Rails 4应用程序中捕获失败的OmniAuth登录尝试信息

时间:2014-12-02 19:44:12

标签: ruby-on-rails-4 omniauth

目标:我尝试使用Ruby on Rails应用程序在用户无法登录OmniAuth时向我发送电子邮件。我希望电子邮件包括(1)在表单中输入的用户名,以及(2)密码字段的MD5哈希值。

障碍:OmniAuth在成功登录后返回POST,在身份验证失败后返回GET。 "成功" POST包括用户名和过滤后的密码,但是"失败" GET不包括这两个参数。

所以我想我的问题是"我可以让OmniAuth返回我想要的参数吗?如果没有,我怎样才能让Rails记得表格数据 后它被发送到OmniAuth?"

1 个答案:

答案 0 :(得分:0)

我通过电子邮件发送了OmniAuth团队,他们给了我下面的解决方案(非常感谢!):

  

您可以通过添加on_failure操作来执行自定义故障处理。

     

OmniAuth.config.on_failure = Proc.new {| env | #do stuff}

     

https://github.com/intridea/omniauth/blob/master/lib/omniauth/failure_endpoint.rb   是默认的故障端点作为示例

所以我在config / initializers / omniauth.rb中添加了以下内容:

OmniAuth.config.on_failure = Proc.new{|env|
myLog = ActiveSupport::TaggedLogging.new(Logger.new("log/omniauth_log.txt"))
myLog.tagged("OmniAuth", "ENV") { myLog.info "Failed login attempt - username: #{env["rack.request.form_hash"]["username"]}, password: #{env["rack.request.form_hash"]["password"]} "}
OmniAuth::FailureEndpoint.new(env).redirect_to_failure}

...并正确记录用户名和密码。剩下要做的就是加密密码。

如果要显示正在进行的所有操作,可以记录#{env.inspect}本身。它虽然是一个非常大的散列(也包含较小的散列),所以也许log#{env.inspect}一次并选出与你的任务相关的字段。