2012-08-15 61 views
4

我正在通過現有的facebook帳戶登錄網站。所以我註冊了一個facebook應用程序,並存儲了apisecret in development.rbproduction.rb文件。然後我用omniauth-facebook gem + devise gem來實現這個。它工作完美。Rails + omniauth + facebook - csrf檢測到

順便說一句,用戶可以通過內部身份驗證(由設計)或通過usig facebook賬戶登錄。

但是有一個奇怪的問題。它工作完美只有如果我登錄Facebook的帳戶,我註冊了一個應用程序。

因此,我註冊了另一個未在我的Rails應用程序中使用的應用程序並嘗試登錄的Facebook帳戶。它導致錯誤「發生錯誤,請稍後再試。」 ...... CSRF檢測「‘

我試圖用1.4.0 omniauth Facebook的寶石,而不是一個1.4.1,但它也造成了一個錯誤「must pass either a代碼’無法從Facebook賬戶,因爲您進行身份驗證」 parameter or a signed request (via signed_request parameter or a fbsr_XXX cookie)

寶石

oauth2 (0.8.0) 
omniauth (1.1.0) 
omniauth-oauth2 (1.1.0) 
omniauth-facebook (1.4.1) 
warden (1.2.1) 
devise (2.1.2) 

你的想法嗎?

回答

7

我也有這個問題,事實證明我的Facebook應用程序中仍然啓用了「沙箱」模式。聽起來像這可能是你的問題,以及:)

如果不是,你可以請張貼任何相關的日誌條目?

+0

這可能也有幫助:http://stackoverflow.com/questions/11597130/omniauth-facebook-keeps-reporting-invalid-credentials – imgrgry 2012-08-20 16:55:15

+0

謝謝:)你已經節省了我很多時間:) – 2013-01-19 08:56:20

1

對於我來說,我需要添加provider_ignores_state: true我Omniauth配置:

config.omniauth :facebook, ENV['FACEBOOK_APP_ID'], ENV['FACEBOOK_APP_SECRET'], { 
    strategy_class: OmniAuth::Strategies::Facebook, 
    provider_ignores_state: true 
} 

這是omniauth-facebook寶石1.6.0版本。

還有更多的信息也是在https://github.com/mkdynamic/omniauth-facebook/issues/73

0

我解決了這個問題,當我刪除「omniauth.rb」,因爲我已經有低於這個配置在devise.rb:

config.omniauth :facebook, ENV["FB_ID"], ENV["FB_SECRET"], 
    scope: 'email', 
    info_fields: 'email, first_name, last_name', 
    image_size: 'large', # 50x50, guaranteed ratio 
    secure_image_url: true 

記得重新啓動切斷測試。