Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Omniauth facebook弹出式身份验证不返回Omniauth.auth_Ruby On Rails_Ruby On Rails 3_Devise_Omniauth_Facebook Login - Fatal编程技术网

Ruby on rails Omniauth facebook弹出式身份验证不返回Omniauth.auth

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]

我已经为此挣扎了两天:

我已经用Desive正确地实现了Omniauth factbook。现在,我想通过在弹出窗口中进行Facebook身份验证来改进它,而不是访问Facebook.com。我随后在
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