【发布时间】:2012-09-30 09:42:15
【问题描述】:
我已关注 Railscast 360 为我的 Rails 应用程序设置 Omniauth-Facebook 身份验证。身份验证工作得很好,但我让自己发疯,试图通过范围请求以获得额外的权限。我知道它们是可用的,因为我可以手动将范围请求输入 url。我已经尝试了所有方法并用尽了所有谷歌搜索。
正如 Railscast cmets 中所建议的,我已将 Omniauth-Facebook gem 降级到 1.4.0,据我了解,这意味着范围不能作为 Omniauth 初始化程序的哈希值传递,而是通过 javascript 传递。两者都不适合我,但与我根据 Railscast 运行咖啡脚本的 cmets 不同,我已经尝试了各种位置的范围,但要么得到错误,要么得到不完整的结果......即只是电子邮件,没有 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
(插入真实ID!)
然后我似乎可以通过将单词范围放入咖啡脚本中的 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 中,但我尝试放置在那里的尝试要么抛出错误,要么根本不起作用。
帮助! :)
【问题讨论】:
-
您已将
scope参数放入FB.init调用中——但它属于FB.login调用,因为它调用了请求权限的身份验证对话框。 -
谢谢。任何想法我应该把它放在哪里,因为当我尝试时它会抛出错误。
-
我对 coffescript 了解不多。我建议你检查真正编译的 JS 输出,并尝试将其与 JS SDK 文档中的代码匹配。
标签: ruby-on-rails-3 facebook-graph-api authentication ruby-on-rails-3.2 omniauth