2

我跟着Railscast 360爲我的Rails應用程序設置了Omniauth-Facebook身份驗證。身份驗證運行良好,但我瘋狂地試圖通過範圍請求額外的權限。我知道它們是可用的,因爲我可以手動將範圍請求輸入到URL中。我嘗試了一切,並耗盡了所有的谷歌搜索。Rails 3.2 with Omniauth-Facebook - 權限問題範圍

正如Railscast評論中所建議的,我已將Omniauth-Facebook gem降級到1.4.0,這對我的理解意味着範圍無法作爲來自Omniauth初始化程序的散列傳遞,而是通過JavaScript傳遞。這兩個都不適合我,但不同於我根據Railscast運行咖啡腳本的評論,我已經嘗試過在範圍內的各種位置,但是要麼出現錯誤或者結果不完整。只是電子郵件,沒有user_events等

我知道這裏沒有代碼,但它完全按照每個railscast。

誰也跟着相同的Railscast提供任何建議或者解決1.4.1的問題,所以我可以從初始化程序傳遞範圍散列或如何在運行1.4.0時正確傳遞它。

提前感謝!

更新: 我有點得到某處!但這並不完全正確。任何指針將非常感激。

在我Omniauth初始化我有:

Rails.application.config.middleware.use OmniAuth::Builder do 
    provider :facebook, 'app_id', 'secret_id', {:scope => 'user_birthday,user_events,email'} 
end 

(通過實時IDS插入!)

然後我就可以看起來通過將字範圍爲FB.Init的CoffeeScript的範圍內做出正確的請求:

jQuery -> 
    $('body').prepend('<div id="fb-root"></div>') 

    $.ajax 
    url: "#{window.location.protocol}//connect.facebook.net/en_US/all.js" 
    dataType: 'script' 
    cache: true 

window.fbAsyncInit = -> 
    FB.init(appId: 'app_id', cookie: true, scope) 

    $('#sign_in').click (e) -> 
    e.preventDefault() 
    FB.login (response) -> 
     window.location = "/auth/facebook/callback" if response.authResponse  

    $('#sign_out').click (e) -> 
    FB.getLoginStatus (response) -> 
     FB.logout() if response.authResponse 
    true 

(再次用上述插入實際的appid)

然而,這停止彈出工作,所以我很確定我已經把範圍不正確。我看到的其他例子將它放在FB.login中,但是我嘗試在那裏放置錯誤或者根本不起作用。

幫助! :)

+0

您已將'scope'參數放入'FB.init'調用中 - 但它屬於'FB.login'調用,因爲它會調用請求權限的Auth對話框。 – CBroe

+0

謝謝。任何想法,我應該把它放在它,因爲它是在我嘗試時拋出錯誤。 – Raoot

+0

我對coffescript瞭解不多。我建議你檢查真正的編譯JS輸出,並嘗試將它與JS SDK文檔中的代碼進行匹配。 – CBroe

回答

8

管理解決此問題。這是扔給我的咖啡文字。在http://coffeescript.org/嘗試咖啡文字工具是非常有幫助的。

的範圍的正確位置如下:

$('#sign_in').click (e) -> 
    e.preventDefault() 
    FB.login ((response) -> 
     window.location = '/auth/facebook/callback' if response.authResponse), scope: "email,user_events,user_location,user_birthday" 

希望這有助於一些人。