我关注了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
只包含accessToken
和signedRequest
以及userid
,而法术需要code
。
是否有正确执行此操作(或使用code
获取accessToken
?)。
答案 0 :(得分:1)
但是,当Sorcery需要代码时,authResponse只包含accessToken和signedRequest以及用户ID。
是否有正确的做法(或使用accessToken获取代码?)。
在服务器端流程中,code
只是获取访问令牌的中间步骤 - 应用获取代码,交换访问令牌的代码。
因为在客户端流程中,你已经获取一个访问令牌 - 它完全没有得到“正确”。
所以你有两个选择:
要么重构你的巫术,要么它跳过获取代码的步骤并交换访问令牌,并在获得它之后直接“设置”访问令牌(Sorcery可能想要它的地方)要设置);或
坚持服务器端流程,但在弹出窗口中打开它。然后你仍然会得到代码,但你会在弹出窗口中得到它。所以你必须关闭弹出窗口,然后自己重新加载原来的窗口。