Facebook通过登录未在rails应用程序中返回Token



我已经使用本教程通过登录配置了Facebook,它运行良好。我可以在Facebook上发送登录电话,在用户确认后,它会重定向到我的网站。然而,在回调URL中,只有";代码";正在返回,但我需要一个访问令牌。

这是我的密码。

Devise.rb  
config.omniauth :facebook, "client_id", "secret", scope: 'public_profile,email,manage_pages,read_insights',:display => 'popup'
User.rb  
devise  :database_authenticatable,:registerable,:recoverable, 
:rememberable, :trackable, :validatable,
:confirmable,:lockable,:timeoutable,
:omniauthable, omniauth_providers: [:facebook]
def self.current
Thread.current[:user]
end
def self.current=(user)
Thread.current[:user] = user
end
def self.create_from_provider_data(provider_data)
where(provider: provider_data.provider, uid: provider_data.uid).first_or_create do | user |
user.email = provider_data.info.email
user.password = Devise.friendly_token[0, 20]
user.skip_confirmation!
end
end

omniauth controller  
def facebook
@user = User.create_from_provider_data(request.env['omniauth.auth'])
if @user.persisted?
sign_in_and_redirect @user
set_flash_message(:notice, :success, kind: 'Facebook') if is_navigational_format?
else
user = User.create!(email: auth.info.email,
password: Devise.friendly_token[0,20],
user_name: auth.info.first_name
)
user.authentications.create!(user_id: user.id,
provider: auth.provider,
uid: auth.uid)
flash[:error] = 'There was a problem signing you in through Facebook. Please register or try signing in later.'
redirect_to new_user_registration_url
end 
end
def failure
flash[:error] = 'There was a problem signing you in. Please register or try signing in later.' 
redirect_to new_user_registration_url
end

回调响应:

参数:{"代码"=>>AQBBtixd3nmIkT_KyKUKmy68hBYt7kdZ0jX1pATNmDCSWmjfoiAC_8C5aOF3P3jKRyhKYX2JfL0gZDWZCTraN_kdZpxIJu8YWkktr0E9Q2WXk6xjz0Uyz4cS2YeTv0SyqjZbZvQr8roxKCPvZb-6UKbzMGZsi3-VLXK3spfs729nR8FilmuatZqQ-TanApTy-8Qh195ntqfD6gIMhbZZMBh AuVSbf6GmyT-anNV0exczDMzKIF6OpZoIFC7Vxez8EH3cR7BUPqc5OldfbDD8j9pY6kDeoc00An9wuGj4hAfne_jeShUZTw_zSQMmxkbMqe2acFPJWE5DLL2QNII54"=>quot;c231b221dba5bdc33fff6349af5793c0cb5bdcc69253372"}

根据本文档,我们可以从回调响应中获得所需的信息。

如何更新我的代码以获取访问令牌。

您可以发送另一个带有获取访问令牌代码的请求。

您可以通过request.env['omniauth.auth']['info']['email']获取电子邮件和其他详细信息。

正如我所看到的,您正在使用auth.info.email,并且由于错误持续存在,所以没有定义auth。

最新更新