2014-12-02 36 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}並選擇與任務相關的字段。

相關問題