2013-02-05 50 views
3

我正在使用devise/omniauth來驗證我的Rails應用程序對Facebook。我試圖將callback_path更改爲自定義,但無論我如何設置,omniauth.auth請求變量都會返回爲零。例如,我在這裏的callback_path設定確切的價值,這是,如果我不把它:Facebook身份驗證不能與自定義回調路徑一起工作

Devise.setup do |config |  
    require "omniauth-facebook" 
    config.omniauth :facebook, 
    ENV['FACEBOOK_APP_ID'], 
    ENV['FACEBOOK_APP_SECRET'], 
    scope: "email", 
    :setup => lambda { |env| 
     env['omniauth.strategy'].options[:callback_path] = "user/auth/facebook/callback" 
    } 
end 

如果我不設置:callback_path,則認證工作,我得到的數據回omniauth.auth請求變量。但是,我必須重寫它,因爲我需要支持在回調中傳回一個屬性。

我查看了Omniauth::Strategy code,看看可能會出現什麼問題,但我無法弄清楚發生了什麼問題。

我的問題:

  • 這是爲什麼不工作?
  • 有沒有更好的方法來解決問題?

回答

2

參數state不應該被用來傳遞數據(事實上,只是想一想,你是在相信第三方的數據!)。該參數僅用於緩解CSRF攻擊。

所以,你應該做的,是通過你喜歡的鏈接任何PARAM,就像這樣:

link_to user_omniauth_authorize_path(:facebook, :some_key => 'some_data') 

Omniauth將automatically add that data to the session並在回調將remove that data from the session,讓你訪問它是這樣的:

request.env['omniauth.params']['some_key'] 
+0

我確實最終使用狀態來傳遞變量,但我仍然不明白爲什麼callback_path不能被覆蓋。根據文件,這正是它應該用於的。 –

+1

事實上,我看了[安裝階段Omniauth wiki](https://github.com/intridea/omniauth/wiki/Setup-Phase),它看起來與您嘗試的相符。順便說一句,你也嘗試'config.omniauth:臉譜,ENV ['FACEBOOK_APP_ID'],ENV ['FACEBOOK_APP_SECRET'],:callback_path =>「user/auth/facebook/callback」? – Ashitaka

+0

不,但我會給你一個鏡頭,謝謝你的建議。 –

相關問題