Ruby on rails Omniauth facebook弹出式身份验证不返回Omniauth.auth
我已经为此挣扎了两天: 我已经用Desive正确地实现了Omniauth factbook。现在,我想通过在弹出窗口中进行Facebook身份验证来改进它,而不是访问Facebook.com。我随后在Ruby on rails Omniauth facebook弹出式身份验证不返回Omniauth.auth,ruby-on-rails,ruby-on-rails-3,devise,omniauth,facebook-login,Ruby On Rails,Ruby On Rails 3,Devise,Omniauth,Facebook Login,我已经为此挣扎了两天: 我已经用Desive正确地实现了Omniauth factbook。现在,我想通过在弹出窗口中进行Facebook身份验证来改进它,而不是访问Facebook.com。我随后在omniauth.rb 我成功地将登录名加载到facebook,并返回了一个hash request.authRequest,其中包含有关用户ID的信息 然而,当我回到回调路径(/auth/facebook/callback)时,我没有像以前那样从request.evn[omniauth.auth]
omniauth.rb
我成功地将登录名加载到facebook,并返回了一个hash request.authRequest,其中包含有关用户ID的信息
然而,当我回到回调路径(/auth/facebook/callback)时,我没有像以前那样从request.evn[omniauth.auth]中获得:provider和:uid
为什么即使Facebook API返回身份验证哈希,也没有创建omniauth哈希?如何解决此问题
我处理facebook回调的控制器很简单:
class ServicesController < ApplicationController
def create
auth = request.env["omniauth.auth"]
debugger
(我是新来的,我必须回答而不是评论。)
你似乎把一些事情搞混了。指定:display=>“popup”
不会触发弹出窗口。这是一个与Facebook相关的选项,用于指定登录表单的显示模式(此处解释:)
解释了发生的一些情况,但您可能不想维护自己的弹出窗口。Facebook的JavaScript SDK通过FB.login函数实现了这一点(此处解释:)
如果没有发布所有相关代码,很难进行故障排除。从您编写的内容来看,JavaScript端似乎工作正常。出于好奇,您的omniauth.rb初始值设定项是什么样子的?我做了一些测试,并阅读了有关railscast的评论,您需要降低gem的级别 gem“omniauth facebook”、“1.4.0” 如果您需要有关它的更多信息: 代码如下:
希望有帮助:)您已经将其设置为
/app/assets/javascripts/services.js.coffee.erb
?我正在努力确保我理解'
。好像有太多的引号了嗨Austin?我不确定我是否理解你的问题,但我确实有一个名为facebook.js.coffee.erb的文件,其中包含我问题中提到的coffeescript代码。在那里,我有实际的ID而不是myAppID,比如'
。第一个引号用于注入html元素,第二个引号用于包装文本字符串。如果您有这样的硬编码,为什么需要在ERB块中使用它?奥斯汀:我不需要它。把它放在那里,这样我以后会记得把它改成ENV[myAppID]。我刚刚删除了ERB块并硬编码了我的ID,但没有任何变化。好的,谢谢你的解释。如果一切都这么简单就好了。嗨,塞纳亚尔:谢谢你的帮助。之前(在评论之后),我曾试图将omniauth facebook降级到1.4.0,但对我来说不起作用。你能在github上分享代码吗?我将非常感谢,因为我花了几天的时间试图解决这个问题。增加了用户电子邮件的范围。非常感谢,senayar。我现在实际使用的是1.4.0。我在github上尝试了你的代码,但也不起作用。令人失望的是,我也没有收到任何错误消息(因此它与railscasts上的评论不同)。我明天再试试你的代码。您是否成功地使用Deviate实现了omniauth facebook的javascript版本?你试图帮我改变什么?是的,我的版本使用咖啡脚本和弹出窗口。克隆并尝试:)你会看到很多。我今天就试试。谢谢你指出这个问题。但是,移除它并没有帮助。我是出于绝望才尝试的。我将把omniauth.rb粘贴到我的问题上。
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: '<%= "myAppID" %>', cookie: true)
$('#facebook_signin').click (e) ->
e.preventDefault()
FB.login (response) ->
window.location = '/auth/facebook/callback' if response.authResponse
$('#facebook_signout').click (e) ->
FB.getLoginStatus (response) ->
FB.logout() if response.authResponse
true
Rails.application.config.middleware.use OmniAuth::Builder do
# The following is for facebook
provider :linkedin, '3yn', 'iMJ'
provider :twitter, 'SQ', 'T5fo'
provider :facebook, '081', 'e80',
scope: "email"
end