我对Facebook如何在不同的网络应用程序(Facebook和Messenger)中管理用户会话感到好奇。当我进入Messenger网络应用程序时,它知道我已登录Facebook并让我使用该应用程序。我想知道哪些技术可以让我实现(Redis可能?)或者他们如何共享同一个会话?
答案 0 :(得分:1)
messenger.com
向facebook.com
发出ajax请求,并在用户登录时获取信息。
在messenger.com
中进行身份验证后,您将拥有一个独立于facebook.com
会话的新会话。
可以在开发人员工具的“网络”选项卡中看到所做的请求:
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"
}