我对Facebook如何在不同的网络应用程序(Facebook和Messenger)中管理用户会话感兴趣。当我进入Messenger web应用程序时,它知道我登录了Facebook,并允许我使用该应用程序。我想知道哪种技术能让我做到这一点(也许是Redis?)或者他们怎么能共享同一个会话?
发布于 2017-05-28 20:39:46
messenger.com
向facebook.com
发出ajax请求,并在用户登录或未登录时获取信息。
一旦在messenger.com
中进行了身份验证,就会有一个独立于facebook.com
会话的新会话。
所提出的请求可以从developer tools的Network选项卡中看到:
POST https://www.facebook.com/login/async_sso/messenger_dot_com/?dpr=1&__a=1
这个端点允许messenger.com
发出跨源请求(因为这个响应头):
access-control-allow-origin: https://www.messenger.com
在x-auth-result
中,关于Facebook帐户的信息是用base64发送的,并使用JSON.parse(atob(...))
进行解析。
例如,我的是这样的:
X-Auth-Result: eyJ1c2VyaWQiOi....sd1EifQ==
然后他们就会:
var n = m.getResponseHeader('X-Auth-Result');
if (n) {
var o = JSON.parse(atob(n));
c('Arbiter').inform('messengerdotcom_fb_session_info', o);
}
在我的例子中,o
将是这样的:
{
"userid": "1000....756",
"name": "Ionică Bizău",
"secret": "P0....r",
"persistent": true,
"initial_request_id": "AfU...lwQ"
}
然后,他们终于可以在按钮中显示你的全名了。
当用户未登录时,Facebook将发回一个userid: "0"
:
{
"userid":"0",
"initial_request_id":"A6...YOd"
}
https://stackoverflow.com/questions/44234442
复制相似问题