KJ *_*dis 5 javascript facebook facebook-graph-api
我正在编写一个webapp,用户需要使用Facebook登录(Facebookless登录在应用程序的上下文中没有意义).理想情况下,在用户首次访问后,当用户访问时/index,我的webapp会看到之前存放的cookie,并自动无缝地登录用户并转到应用程序(/app).
当用户退出Facebook并返回我的应用程序时,我的问题就出现了.由于我们域中的cookie仍然存在,并且它们oauth_token仍然有效(它们现在为60天),我仍然可以自动登录用户,应用程序将按预期工作.
对我而言,即使他们没有登录Facebook,该应用程序仍然使用他们的Facebook帐户登录似乎是不对的.我在Stackoverflow上玩了一下; 它也允许这种行为.我的担忧是否错位,或是否有建议的方式来查看用户是否在首次向/index我的服务器请求时登录Facebook .
小智 2
在我看来,当用户已经退出 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);
});
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1232 次 |
| 最近记录: |