我已经按照Railscast 360为我的 Rails 应用程序设置了 Omniauth-Facebook 身份验证。身份验证效果很好,但我让自己发疯,试图通过范围请求以获得额外的权限。我知道它们是可用的,因为我可以手动将范围请求输入 url。我已经尝试了一切并用尽了所有谷歌搜索。
正如 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
(插入真实身份!)
然后,我似乎可以通过将单词范围放入咖啡脚本中的 FB.Init 来提出正确的请求:
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 中,但我尝试放置在那里的尝试要么抛出错误,要么根本不起作用。
帮助!:)