我现在已经奋斗了2天了:
我使用Devise正确实现了Omniauth-factbook。现在,我想通过在弹出窗口中进行Facebook身份验证而不是去facebook.com来改进它。我按了Ryan's RailsCast并将display => 'popup'
添加到omniauth.rb
我成功加载登录到facebook并返回了一个哈希request.authRequest,其中包含有关userId的信息。
然而,当我回到回调路径(/ auth / facebook / callback)时,我没有得到:provider和:uid来自request.evn [omniauth.auth],就像我以前一样。
为什么即使Facebook API返回了身份验证哈希,也没有创建omniauth哈希?我该怎么做才能解决这个问题?
我的处理facebook回调的控制器很简单:
class ServicesController < ApplicationController
def create
auth = request.env["omniauth.auth"]
debugger
在调试器上,当我使用IRB进行检查时,request.env中没有omniauth哈希。
BTW,我想我在我的coffeescript文件中打开了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
答案 0 :(得分:0)
(当我在这里时,我必须回答而不是发表评论。)
你似乎混淆了一些事情。指定:display => 'popup'
不会触发弹出窗口。这是一个与Facebook相关的选项,用于指定登录表单的显示模式(在此处说明:https://developers.facebook.com/docs/reference/dialogs/oauth/)
Turn omniauth facebook login into a popup解释了一些正在发生的事情,但您可能不想维护自己的弹出窗口。 Facebook的JavaScript SDK使用FB.login函数(在此解释:https://developers.facebook.com/docs/reference/javascript/FB.login/)
执行此操作如果没有发布所有相关代码,很难排除故障。从你写的,听起来像JavaScript方面正常工作。出于好奇,你的omniauth.rb初始化程序是什么样的?
答案 1 :(得分:0)
我做了一些测试并阅读有关railscast的评论,你需要降级gem
gem'omniauth-facebook','1.4.0'
如果您需要更多相关信息:
http://railscasts.com/episodes/360-facebook-authentication?view=comments#comment_159418
此处代码为:https://github.com/senayar/facebook_connect
希望它有所帮助:)