Ruby on rails 3 带有Omniauth Facebook的Rails 3.2-权限问题的范围

Ruby on rails 3 带有Omniauth Facebook的Rails 3.2-权限问题的范围,ruby-on-rails-3,facebook-graph-api,authentication,ruby-on-rails-3.2,omniauth,Ruby On Rails 3,Facebook Graph Api,Authentication,Ruby On Rails 3.2,Omniauth,我已经为我的Rails应用程序设置了Omniauth Facebook身份验证。身份验证工作得很好,但我试图通过作用域请求以获得额外权限,这让我发疯。我知道它们是可用的,因为我可以在url中手动键入范围请求。我尝试了一切,用尽了所有的谷歌搜索 正如Railscast评论中所建议的,我已将Omniauth Facebook gem降级为1.4.0,据我所知,这意味着该范围不能作为哈希从Omniauth初始值设定项传递,而是通过javascript传递。这两种方法都不适用于我,但与我根据Railsc

我已经为我的Rails应用程序设置了Omniauth Facebook身份验证。身份验证工作得很好,但我试图通过作用域请求以获得额外权限,这让我发疯。我知道它们是可用的,因为我可以在url中手动键入范围请求。我尝试了一切,用尽了所有的谷歌搜索

正如Railscast评论中所建议的,我已将Omniauth Facebook gem降级为1.4.0,据我所知,这意味着该范围不能作为哈希从Omniauth初始值设定项传递,而是通过javascript传递。这两种方法都不适用于我,但与我根据Railscast运行coffee脚本的注释不同,我尝试了各种范围放置,但要么得到错误,要么得到不完整的结果……即。只有电子邮件,没有用户事件等

我意识到这里没有代码,但它完全符合铁路公司的要求

同样遵循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!)

然后,我似乎可以通过将单词scope放入coffeescript中的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
jQuery->
$('body')。前缀(“”)
$.ajax
url:“#{window.location.protocol}//connect.facebook.net/en#u US/all.js”
数据类型:“脚本”
缓存:真
window.fbAsyninit=->
init(appId:'app_id',cookie:true,scope)
$(“#登录”)。单击(e)->
e、 预防默认值()
FB.login(响应)->
window.location=“/auth/facebook/callback”if response.authResponse
$(“#注销”)。单击(e)->
FB.getLoginStatus(响应)->
FB.logout()如果response.authResponse
真的
(再次在上面插入真实的appid)

但是,这会停止弹出窗口的工作,所以我很确定我放置的范围不正确。我看到的其他示例将其放置在FB.login中,但我尝试将其放置在FB.login中时要么抛出错误,要么根本不起作用


救命!:)

设法解决了这个问题。是咖啡脚本把我甩了。上的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"

希望这对其他人有所帮助

您已将
scope
参数放入
FB.init
调用中–但它属于
FB.login
调用,因为这将调用Auth对话框,在该对话框中请求权限。谢谢。你知道我应该把它放在哪里吗,因为当我尝试的时候它会抛出错误。我对coffescript不太了解。我建议您检查真正编译的JS输出,并尝试将其与JSSDK文档中的代码相匹配。