2014-12-02 60 views
0

目标:当用户未能登录到OmniAuth时,我试图让Ruby on Rails应用程序向我发送电子邮件。我希望电子邮件包含(1)在表单中输入的用户名,以及(2)密码字段的MD5散列。在Rails 4应用程序中捕获失败的OmniAuth登录尝试信息

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

所以我想我的问题是:“我可以OmniAuth回到我想要的参数?如果没有,我怎么能记得的Rails表单数据之后它被POST'ed到OmniAuth?”

+0

您是否使用omniauth进行身份验证,或将它与Devise/authlogic等其他引擎结合使用? – 2014-12-02 21:34:09

+0

我认为我们自己使用OmniAuth。我在Gemfile或“外部库”中看不到任何与之相对应的宝石。 – NewbieOnRails 2014-12-02 22:19:38

回答

0

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

您可以通过添加ON_FAILURE动作进行自定义失败处理。

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

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

所以我加入配置以下/初始化/ 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}本身。这是一个非常大的散列(虽然也包含较小的散列),所以也许只需记录一次{env.inspect}并选择与任务相关的字段。