Rails 3.2与Omniauth-Facebook - 权限范围问题

Rao*_*oot 2 authentication facebook-graph-api omniauth ruby-on-rails-3 ruby-on-rails-3.2

我跟随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
Run Code Online (Sandbox Code Playgroud)

(插入真实的ID!)

然后,我可以通过将单词scope放入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
Run Code Online (Sandbox Code Playgroud)

(再次使用上面插入的真实appid)

但是,这会阻止弹出窗口工作,所以我很确定我放置了不正确的范围.我见过的其他例子将它放在FB.login中,但我在那里的尝试要么抛出错误,要么根本不起作用.

救命!:)

Rao*_*oot 8

管理解决这个问题.是扔咖啡的咖啡师.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"
Run Code Online (Sandbox Code Playgroud)

希望这有助于其他人.