Javascript 网站Facebook登录:处理用户Facebook注销的最佳实践?
我正在编写一个网络应用程序,用户需要使用Facebook登录(在应用程序的上下文中,无脸登录没有意义)。理想情况下,在初次访问之后,当用户访问Javascript 网站Facebook登录:处理用户Facebook注销的最佳实践?,javascript,facebook,facebook-graph-api,Javascript,Facebook,Facebook Graph Api,我正在编写一个网络应用程序,用户需要使用Facebook登录(在应用程序的上下文中,无脸登录没有意义)。理想情况下,在初次访问之后,当用户访问/index,我的webapp会看到它先前存放的cookie,并自动无缝地将用户登录并转到应用程序(/app) 当用户注销Facebook并返回到我的应用程序时,我的问题就出现了。由于他们在我的域名上的cookie仍然存在,他们的oauth_令牌仍然有效(现在有效60天),我仍然可以自动登录用户,应用程序将按预期工作 在我看来,即使他们没有登录Facebo
/index
,我的webapp会看到它先前存放的cookie,并自动无缝地将用户登录并转到应用程序(/app
)
当用户注销Facebook并返回到我的应用程序时,我的问题就出现了。由于他们在我的域名上的cookie仍然存在,他们的oauth_令牌仍然有效(现在有效60天),我仍然可以自动登录用户,应用程序将按预期工作
在我看来,即使他们没有登录Facebook,应用程序仍然使用他们的Facebook帐户登录似乎是不对的。我在Stackoverflow上玩;它也允许这种行为。我的担心是不是放错地方了,或者有没有一种推荐的方法可以查看用户第一次从我的服务器请求/index
时是否已登录Facebook。在我看来,当用户已从Facebook注销时,你的应用程序不应保持登录状态
一种可能不可取的情况是:如果我在公共计算机上使用您的应用程序,该怎么办。在我注销Facebook后,你的应用程序仍然“记得”我。现在,任何使用这台电脑的人都会在你的应用程序中使用我的Facebook身份
我认为这里的问题是,您设置自己的cookie来记住用户的Facebook登录状态。显然,当用户注销Facebook本身时,您的cookie不会被清除。所以在这一点上,你的cookie与Facebook状态不同步
我建议您不要使用自己的cookie来记住用户的Facebook登录状态。为此,请始终依靠Facebook本身
一般的策略是,无论用户何时访问你的应用程序,你都应该使用Facebook提供的机制检查Facebook的登录状态。这样,您的应用程序将在用户登录状态方面与Facebook同步
我个人使用这段代码调用Facebook Javascript API进行用户登录:
/*
* Init code for Facebook connect
*/
window.fbAsyncInit = function() {
FB.init({
appId : FACEBOOK_APP_ID, // App ID
channelUrl : CHANNEL_URL, // Channel File
status : true, // check login status
cookie : true, // enable cookies to allow the server to access the session
xfbml : true, // parse XFBML
oauth : true
});
// check facebook login status
FB.getLoginStatus(function(response) {
console.log("FB login status: " + response.status);
if (response.status === 'connected') {
showWelcome(); //display welcome message
} else if (response.status === 'not_authorized') {
// the user is logged in to Facebook, but not connected to the app
showFbLogin(); //display Facebook Login button
} else {
// the user isn't even logged in to Facebook.
showFbLogin(); //display Facebook Login button
}
});
// subscribe to facebook events
FB.Event.subscribe('auth.authResponseChange', function(response) {
fbAuthResponseChanged(response);
});
};
问题是,当他们从facebook注销时,FBJS cookie在我的域名上没有被清除。在注销facebook并转到我的应用程序后,我的应用程序仍然可以看到FBJS cookie。在我加载javascript之前,我不知道他们是否真正登录。如果他们登录,这会增加一个额外的重定向,因为他们必须加载my/login页面,js随后会发现他们已经登录,并将他们重定向到/app。按照我的看法,每次你的应用程序代表登录的用户执行任何操作时,你都需要检查该用户是否仍在登录。无论您的应用程序设置了什么cookie来记住Facebook用户登录状态,您都不应该依赖它,或者您应该让它与Facebook状态保持同步。例如,您可以在每次应用程序发布到Facebook之前调用FB.getLoginStatus函数。当然,这可能不是最佳的方法。