在我的MVC应用程序中,我在JQuery中有以下代码来检查用户是否连接到Facebook应用程序
FB.login(function (response) {
switch (response.status) {
case "connected":
case "unknown":
break;
}
}, { scope: "@MyPermissions" });
现在,当我通过我的应用程序进行FB登录时,它会进行身份验证并立即启动FB应用程序授权,最后在授权完成后进入Connected案例。
我的问题是:我可以检测Facebook身份验证何时完成以及授权开始之前?这样我的调试器就可以在授权发生前捕获位置。我必须实际上避免授权。
答案 0 :(得分:2)
实际上oAuth是两步授权,你不能在认证时阻止它。
你可以做一个技巧,通常人们已经登录到Facebook,因此你可以在首次加载时尝试getLoginStatus()
,这肯定会让你not_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 :(得分:0)
否则
首先,出于安全考虑,Facebook登录和app auth是不可分割的。登录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。然后编写您的登录逻辑以检查并在加载或登录时验证令牌。
这种方式返回站点不会启动login / auth对话框,除非accessToekn会话用完,但只会将用户状态更改为登录。然后使用您的访问令牌构建图形api调用。
我使用带有参数https://graph.facebook.com/oauth/access_token_info
的{{1}}来验证令牌。
如果令牌有效会话良好,用户已登录并已授权该应用。如果失败,则删除cookie并点击登录对话框。
还有一些情况需要删除cookie,例如authResponseChange或注销。
就此而言;我相信你想要发布授权的是订阅authResponseChange事件https://developers.facebook.com/docs/facebook-login/login-flow-for-web/。这是一个内部实施:
client_id: APPID, access_token: token
这里有更多的doco https://developers.facebook.com/docs/reference/javascript/FB.Event.subscribe/
还有其他事件可以利用
auth.login - 当身份验证状态从未知状态更改为已连接时触发
auth.authResponseChange - 在authResponse更改时触发
auth.statusChange - 状态发生变化时触发(有关此含义的其他信息,请参阅FB.getLoginStatus)
答案 2 :(得分:-1)
我没有为自己试过这个,但是通过文档中的FB.getLoginStatus页面查看建议如下。
FB.getLoginStatus
FB.getLoginStatus允许您确定用户是否已登录 Facebook并已验证您的应用程序。有三种可能 用户的状态:
- 用户已登录Facebook并已对您的应用程序进行身份验证(
connected
)- 用户已登录Facebook,但未对您的应用程序进行身份验证(
not_authorized
)- 此时用户未登录Facebook,因此我们不知道他们是否已对您的应用进行了身份验证(
醇>unknown
)
如果我正确理解了您的问题,您可以检查status
是否有not_authorized
这样的案例可以让您突破,以防用户确实已登录但未授权您的申请爱好。
请确保将此案例置于connected
案例之上。
此外,即使您使用的是FB.login
而不是FB.getLoginStatus
,这也应该有效,因为根据同一页面中的以下引用,
返回所有这些事件的响应对象与 来自FB.getLoginStatus,FB.login或FB.logout的响应。这个回应 对象包含:
状态用户的状态。其中一个
connected
,not_authorized
或unknown
。authResponse authResponse对象。
返回的对象是一样的。