如何使用带有巫术宝石的Facebook JavaScript SDK

时间:2012-10-04 20:50:05

标签: ruby-on-rails-3 facebook-javascript-sdk sorcery

我关注了guide provided here by 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时所看到的,这是一个干净的弹出窗口。为实现这一目标,我遵循了tutorial on Railscasts

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

但是,authResponse只包含accessTokensignedRequest以及userid,而法术需要code

是否有正确执行此操作(或使用code获取accessToken?)。

1 个答案:

答案 0 :(得分:1)

  

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

     

是否有正确的做法(或使用accessToken获取代码?)。

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

因为在客户端流程中,你已经获取一个访问令牌 - 它完全没有得到“正确”。

所以你有两个选择:

  • 要么重构你的巫术,要么它跳过获取代码的步骤并交换访问令牌,并在获得它之后直接“设置”访问令牌(Sorcery可能想要它的地方)要设置);或

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