Facebook javascript sdk FB认证后和FB授权前如何检测
在我的MVC应用程序中,我在JQuery中有以下代码来检查用户是否连接到Facebook应用程序Facebook javascript sdk FB认证后和FB授权前如何检测,facebook-javascript-sdk,Facebook Javascript Sdk,在我的MVC应用程序中,我在JQuery中有以下代码来检查用户是否连接到Facebook应用程序 FB.login(function (response) { switch (response.status) { case "connected": case "unknown": break; } }, { scope: "@MyPermissions" }); 现在,当我通过我的应用程序进行FB登录时,它会进行身份验证
FB.login(function (response) {
switch (response.status) {
case "connected":
case "unknown":
break;
}
}, { scope: "@MyPermissions" });
现在,当我通过我的应用程序进行FB登录时,它会进行身份验证,并立即启动FB应用程序授权,最后在完成授权后进入连接案例
我的问题是:我能在授权开始之前检测Facebook身份验证何时完成吗?这样我的调试器就可以在授权发生之前捕获该位置。实际上,我必须避免授权。我还没有亲自尝试过,但通过文档中的页面查看,可以得出以下结论 FB.getLoginStatus getLoginStatus允许您确定用户是否登录到 Facebook并已验证您的应用程序。有三种可能 用户的状态:
已连接
)未授权
)unknown
)状态
,查看是否有未授权的案例
,如果用户确实已登录但尚未授权您的应用程序,您可以通过该案例进行破解
但请确保将此案例放置在已连接的案例上方
此外,即使您使用的是FB.login
而不是FB.getLoginStatus
,这也应该有效,因为根据同一页面的以下引用
返回给所有这些事件的响应对象与
来自FB.getLoginStatus、FB.login或FB.logout的响应。这一反应
对象包含:
状态用户的状态。已连接
,未经授权
或
未知
authResponseauthResponse对象
返回的对象是相同的。编辑:这是您想要的吗
否则
首先,出于安全原因,Facebook登录和应用程序验证是不可分割的。登录Facebook和通过应用程序登录Facebook是不同的。要从外部站点使用Facebook登录,实际上是通过一个应用程序登录,该应用程序要求用户允许该应用程序访问其个人资料的某些部分
因此,当用户单击登录时。首先,如果他们还没有登录Facebook,他们将被要求登录。您可以在使用FB.getLoginStatus登录之前检查此项
一旦用户登录到Facebook,他们必须验证你的应用程序,你才能访问他们的信息。此信息也可以使用FB.getLoginStatus获得
您需要的是一个accessToken来调用api。当您运行登录对话框时,fb js sdk会在内部存储此信息。所以如果你不使用它登录。除非您自己构建api调用,否则api调用将失败
根据给出的信息,我假设您希望避免在以前登录的用户每次访问页面时显示logging/auth对话框。这是我能想到的唯一一种情况,您可能需要避免显示对话框
在这种情况下,您可以使用cookie和访问令牌在页面访问期间保持登录状态
首次登录后,使用cookie在本地存储accessToken。然后对登录逻辑进行编码,以在加载或登录时检查并验证令牌
这种方式返回到站点不会启动登录/身份验证对话框,除非accessToekn会话用完,但只会将用户状态更改为已登录。然后使用访问令牌构建图形api调用
我使用https://graph.facebook.com/oauth/access_token_info
使用参数客户端id:APPID,访问\u令牌:令牌
以验证令牌
如果令牌有效,会话正常,则表示用户已登录并已授权应用程序。如果失败,cookie将被删除,我将退出登录对话框
还有一些情况需要删除cookie,如authResponseChange或注销
关于这一点;我相信您想要的后期授权是订阅authResponseChange事件。下面是一个被破坏的实现:
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
}
});
这里有更多的文档
还有其他一些你可以利用的活动
身份验证登录-身份验证状态从未知更改为已连接时激发
auth.authResponseChange-在authResponse更改时激发
auth.statusChange-在状态更改时触发(有关这意味着什么的更多信息,请参阅FB.getLoginStatus)实际上,oAuth是两步授权,您不能在身份验证时停止它
你可以做一个技巧,通常人们已经登录到facebook,因此你可以在第一次加载时尝试getLoginStatus()
,它肯定会返回你not\u authorized
,因为它还没有授权你的应用,你可以执行你的检查,然后获得用户授权
FB.getLoginStatus(function(response) {
if (response.status === 'not_authorized') {
// the user is logged in to Facebook,
// but has not authenticated your app
} else {
// the user isn't logged in to Facebook.
}
});
你到底想抓什么?如果用户进行身份验证…然后立即出现授权屏幕…我想在某些情况下取消授权。这些方面运气好吗:1)2)3)你能更好地解释一下你的用例吗。您将什么定义为“已完成的身份验证”、“授权开始前”和“在某些情况下我想取消授权”。也许关于这篇文章@abcdefghi,在调用Facebook init之后,为什么不调用getLoginStatus进行验证,并根据您的条件是否匹配,决定是否调用login()。。。?这是您想要的吗?“状态用户的状态