我已经为此苦苦挣扎了 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