【问题标题】:Rails 3.2 with Omniauth-Facebook - Scope for Permissions issue带有 Omniauth-Facebook 的 Rails 3.2 - 权限范围问题
【发布时间】: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


【解决方案1】:

设法解决了这个问题。是咖啡脚本把我扔了。 http://coffeescript.org/ 的 try coffeescript 工具非常有用。

范围的正确放置如下:

  $('#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"

希望这对其他人有所帮助。

【讨论】:

    猜你喜欢
    • 2014-06-30
    • 2011-05-15
    • 2013-02-14
    • 2014-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-11
    相关资源
    最近更新 更多