验证Facebook SDK登录

时间:2014-03-30 20:03:58

标签: facebook facebook-php-sdk facebook-login

我添加了用户使用Facebook帐户登录我网站的功能。当他们在网站上创建帐户时,如果他们使用他们的Facebook信息创建了帐户,我会将他们的用户名和Facebook用户ID添加到我的users表中(如果使用Facebook则不需要密码)。如果他们在没有Facebook的情况下创建帐户,我会将他们的用户名和密码添加到我的users表中。

当用户登录时,我显然会验证他们的用户名/密码组合,如果他们没有使用Facebook注册,如果他们使用Facebook注册我通过检查用户是否找到他们的Facebook ID进行验证。 Facebook验证方法似乎并不安全,所以我想检查一下我是否做得对。

这是我的登录代码的精简版本:

$facebook = new Facebook(
    array(
        'appId'  => '123456789',
        'secret' => '123456789',
    )
);

$fb_user = $facebook->getUser();

if ($fb_user)
{
    $fb_user_profile = $facebook->api('/me');
    $facebook_id = (int) $fb_user_profile['id'];

    if (verify_facebook_user($facebook_id))
    {
        // a user with facebook_id found in database
        // log user in
    }
else
{
    if (verify_user($username, $password))
    {
        // username/password combination found in database
        // log user in
    }
}

要登录用户,只需验证是否在数据库中找到了带有facebook_id的用户就足够了吗?

1 个答案:

答案 0 :(得分:2)

是的,你说得对,因为每个Facebook用户都有一个唯一的用户名和密码。

$facebook_id = (int) $fb_user_profile['id'];

所以两个用户都没有可能拥有相同的facebook id,所以你不必担心它。


请参阅 Facebook安全检查表以获取更多信息。

以下列表应被视为使用Facebook登录的所有应用应实现的绝对最低值。其他功能对您的应用来说是独一无二的,您需要始终考虑如何使您的应用尽可能安全。不安全的应用程序将失去其受众的信任,人们将停止使用它们。

  
      
  • 切勿在客户端或可分解代码中包含App Secret。   
  •   
  • 使用App Secret对所有服务器到服务器的图形API调用进行签名。   
  •   
  • 在客户端使用独特的短期代币。   
  •   
  • 不要相信您的应用实际使用的访问令牌   由您的应用生成。   
  •   
  • 尽可能使用我们的官方SDK。   
  •   
  • 通过锁定您的Facebook应用设置来减少应用的攻击面积。
  •   

Reference Link

根据我的经验,如果您使用php sdk比您已使用的Js-SDK更安全。