Facebook Connect - 身份验证和安全性

时间:2009-12-06 20:52:41

标签: security api facebook connect

我想使用Facebook Connect开发外部网站,而不是自己的登录和注册过程。

首先:请不要回答“请参阅facebook.com上的文档”。我想过,我已经多次阅读过所有页面。但我找不到答案。

对于我的登录按钮,我使用以下代码:

<fb:login-button v="2" size="large" autologoutlink="false" onlogin="window.location='/index.php'">Connect with Facebook</fb:login-button>

要显示我使用的当前用户名:

<fb:name uid="loggedinuser" linked="true" firstnameonly="false" possessive="false" useyou="false" ifcantsee="Facebook-User"></fb:name>

最后,对于注销,我使用以下链接:

<a href="#" onclick="javascript:FB.Connect.logoutAndRedirect('/index.php'); return false">Logout</a>

这很容易。它在文档中得到了很好的解释。

但是当我想检测用户是否登录时,我的问题就开始了。 Facebook在this page上解释了有关此主题的所有内容。

但我不明白自己要做什么。我想要做的是:

  • 如果用户请求页面“members.php”并且他没有登录,则应该有消息或者应该重定向。但Facebook的JavaScript功能并不安全,不是吗?通常,我使用服务器端身份验证。
  • 我想知道用户是否已登录以显示登录按钮或注销链接。
  • 如果用户已登录,我想知道他在Facebook上的用户ID。

提前感谢您的帮助!

3 个答案:

答案 0 :(得分:4)

Javascript不安全你是对的。您在Javascript中所做的一切都是为了改善用户体验,而不是强制执行安全性。

如果您使用官方PHP库,则只需在members.php的开头添加以下代码行,

$facebook = new Facebook(API_KEY, API_SECRET);
$fb_user = $facebook->require_login();

如果没有登录,这会将用户重定向到Facebook进行登录。

答案 1 :(得分:0)

如果您想要非常安全,那么当他尝试使用PHP library为FB获取服务器端的members.php时,应检查他是否已登录。

按钮,我会做这样的事情:

FB.Connect.init(...);
FB.ensureInit(function() {
FB.Connect.get_status().waitUntilReady( function( status ) {
   switch ( status ) {
     case FB.ConnectState.connected:
        hideLoginButton();
        loggedIn = true;
        break;
     case FB.ConnectState.appNotAuthorized:
     case FB.ConnectState.userNotLoggedIn:
        showLoginButton();
        loggedIn = false;
   }
 });
});

答案 2 :(得分:-1)

FB.Connect.get_status()不会做你需要的吗?