0

我遵循了Sorcery 提供的关于使用 Facebook 处理用户登录的指南。

# callback method called by Facebook after getting the authorization by the user
if user = login_from(provider) # provider == "facebook"
  redirect_to root_path #, :notice => "Logged in from #{provider.titleize}!"
else
  begin
    user = create_from(provider)
    ...

然而,它只要求我的用户离开我的网站去 Facebook 页面,然后被重定向到这里。

我想要实现的是我在使用 Facebook JavaScript SDK 时看到的,它是我页面中一个干净的弹出窗口。为了实现这一点,我遵循了Railscasts 教程

$('#sign_in').click (e) ->
  e.preventDefault()
  FB.login (response) ->
    window.location = '/auth/facebook/callback' if response.authResponse

然而,authResponse唯一的包含一个accessToken和一个signedRequest,而一段时间的userid巫术需要一个code

反正有没有正确地做到这一点(或得到code使用accessToken?)。

4

1 回答 1

1

但是,authResponse 只包含一个 accessToken 和一个 signedRequest 以及一个用户 ID,而 Sorcery 需要一个代码。

无论如何可以正确执行此操作(或使用 accessToken 获取代码?)。

在服务器端流程中,这code只是获取访问令牌的中间步骤——应用程序获取代码,并为访问令牌交换代码。

因为在客户端流程中,当它完成时你已经获得了一个访问令牌——它没有比这更“合适”的了。

所以你有两个选择:

  • 要么重构你的 Sorcery-thingie,让它跳过获取代码并将其交换为访问令牌的步骤,并在获得访问令牌后直接“设置”访问令牌(无论 Sorcery 可能希望在哪里设置它);或者

  • 坚持服务器端流程,但自己在弹出窗口中打开它。然后你仍然会得到代码,但你会在弹出窗口中得到它。因此,您必须关闭弹出窗口,然后自己重​​新加载原始窗口。

于 2012-10-05T08:13:20.613 回答