2

我已经为此苦苦挣扎了 2 天:

我使用 Devise 正确实现了 Omniauth-factbook。现在,我想通过使 Facebook 身份验证发生在弹出窗口中而不是转到 facebook.com 来改进它。我遵循了Ryan 的 RailsCast并添加display => 'popup'到我的提供程序配置中omniauth.rb

我成功地将登录加载到 facebook 并返回了一个哈希 request.authRequest,其中包含有关 userId 的信息。

但是,当我回到回调路径 (/auth/facebook/callback) 时,我没有像以前那样从 request.evn[omniauth.auth] 获得 :provider 和 :uid。

为什么即使 Facebook API 返回身份验证哈希也没有创建omniauth 哈希?我能做些什么来解决这个问题?

我处理 facebook 回调的控制器很简单:

class ServicesController < ApplicationController
  def create
    auth = request.env["omniauth.auth"]
    debugger

在调试器中,当我使用 IRB 检查时,request.env 中没有omniauth 哈希。

顺便说一句,我想我在我的咖啡脚本文件中打开了 cookie:

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

谢谢你。

更新:我的 omniauth.rb 看起来像这样:

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
4

2 回答 2

0

(当我是新手时,我必须回答而不是发表评论。)

你似乎混淆了一些事情。指定:display => 'popup'不会触发弹出窗口。它是一个与 Facebook 相关的选项,用于指定登录表单的显示模式(此处解释:https ://developers.facebook.com/docs/reference/dialogs/oauth/ )

Turnomniauth facebook login into a popup解释了一些正在发生的事情,但您可能不想维护自己的弹出窗口。Facebook 的 JavaScript SDK 使用 FB.login 函数执行此操作(此处解释:https ://developers.facebook.com/docs/reference/javascript/FB.login/ )

如果没有发布所有相关代码,就很难进行故障排除。从您写的内容来看,听起来 JavaScript 端工作正常。出于好奇,您的 omniauth.rb 初始化程序是什么样的?

于 2013-03-05T04:52:38.710 回答
0

我做了一些测试并阅读了有关 railscast 的评论,您需要降级 gem

宝石'omniauth-facebook','1.4.0'

如果您需要有关它的更多信息:

http://railscasts.com/episodes/360-facebook-authentication?view=comments#comment_159418

这里的代码:https ://github.com/senayar/facebook_connect

希望能帮助到你 :)

于 2013-03-06T01:12:52.720 回答