编辑:这是你什么? Facebook account delink or deauthorize facebook app and check status of linking from facebook app
否则
首先,出于安全原因,Facebook 登录和应用程序身份验证是不可分割的。登录 Facebook 和通过应用程序登录 Facebook 是不同的。要从外部网站使用 Facebook 登录,您实际上是通过要求用户允许该应用访问其个人资料的某些部分的应用登录。
所以当用户点击登录时。首先,如果他们还没有登录 Facebook,他们将被要求登录。您可以在登录前使用 FB.getLoginStatus https://developers.facebook.com/docs/reference/javascript/FB.getLoginStatus/ 进行检查
用户登录 Facebook 后,他们必须对您的应用进行身份验证,您才能访问他们的信息。也可以使用 FB.getLoginStatus 获得此信息
你需要一个 accessToken 来调用 api。当您运行登录对话框时,fb js sdk 会在内部存储它。因此,如果您不使用它登录。除非您自己构建,否则 api 调用将失败。
根据所提供的信息,我假设您希望避免在以前登录的用户每次访问该页面时都显示日志记录/身份验证对话框。这是我能想到的唯一一种情况,您可能会避免显示对话框。
在这种情况下,您可以使用 cookie 和访问令牌在页面访问期间保持登录状态。
在首次登录后使用 cookie 将 accessToken 存储在本地。然后对您的登录逻辑进行编码,以在加载或登录时检查和验证令牌。
除非 accessToekn 会话用完,否则返回站点的这种方式不会启动登录/身份验证对话框,但只会将用户状态更改为已登录。然后使用您的访问令牌构建您的图形 api 调用。
我使用https://graph.facebook.com/oauth/access_token_info 和参数client_id: APPID, access_token: token 来验证令牌。
如果令牌有效会话良好,则用户已登录并已授权应用程序。如果失败,cookie 会被删除,然后我会退出登录对话框。
还有一些您应该删除 cookie 的情况,例如 authResponseChange 或注销。
在那张纸条上;我相信您想要发布授权的是订阅 authResponseChange 事件https://developers.facebook.com/docs/facebook-login/login-flow-for-web/。这是一个内脏的实现:
FB.Event.subscribe('auth.authResponseChange', function(response) {
if (response.authResponse) {
if (response.status === 'connected') {
// User logged in and User has authorized the app
}
else if (response.status === 'not_authorized') {
// User logged in but has not authorized app
}
else {
// User logged out
}
} else {
// No valid authResponse found, user logged out or should be logged out
}
});
这里有更多的docohttps://developers.facebook.com/docs/reference/javascript/FB.Event.subscribe/
还有其他你可以利用的活动
auth.login - 当身份验证状态从未知变为已连接时触发
auth.authResponseChange - 当 authResponse 改变时触发
auth.statusChange - 当状态改变时触发(有关这意味着什么的更多信息,请参阅 FB.getLoginStatus)