Ruby on rails 3 带有Omniauth Facebook的Rails 3.2-权限问题的范围
我已经为我的Rails应用程序设置了Omniauth Facebook身份验证。身份验证工作得很好,但我试图通过作用域请求以获得额外权限,这让我发疯。我知道它们是可用的,因为我可以在url中手动键入范围请求。我尝试了一切,用尽了所有的谷歌搜索 正如Railscast评论中所建议的,我已将Omniauth Facebook gem降级为1.4.0,据我所知,这意味着该范围不能作为哈希从Omniauth初始值设定项传递,而是通过javascript传递。这两种方法都不适用于我,但与我根据Railscast运行coffee脚本的注释不同,我尝试了各种范围放置,但要么得到错误,要么得到不完整的结果……即。只有电子邮件,没有用户事件等 我意识到这里没有代码,但它完全符合铁路公司的要求 同样遵循Railscast的任何人是否可以就使用1.4.1修复问题提供建议,以便我可以从初始值设定项传递范围散列,或者在运行1.4.0时如何正确传递范围散列 万分感谢 更新: 我有点进展了!但这并不完全正确。任何指点都将不胜感激 在Omniauth初始值设定项中,我有: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.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文档中的代码相匹配。