将facebook登录添加到现有登录系统

时间:2012-04-12 23:40:33

标签: php facebook

我想将facebook登录添加到我现有的登录系统并记住我,我知道它应该如何运作:

短版

检查用户是否登录到Facebook,用户是否检索用户ID并检查其是否已连接到任何帐户。如果我们得到一些数据并存储会话变量并且用户已登录。

长版

如何注册

  1. 用户点击注册,用户进入一个页面,其中有两个选项注册并注册Facebook。

  2. 如果用户选择使用Facebook注册,则会自动填写一些信息(如电子邮件),然后用户需要填写密码和昵称。然后我们验证信息,如果它有效我们存储用户+ facebook用户ID。如果用户选择注册,我们不会自动填充,当然也不会存储Facebook用户ID。

  3. 如何检查用户是否已登录:

    1. 检查是否设置了会话变量,如果是用户已登录。如果没有,则继续执行步骤2.

    2. 检查是否存在记住我代码的cookie。如果存在,我们检查代码是否有效,如果用户正在登录。如果cookie不存在,那么我们继续执行步骤3.

    3. 检查用户是否登录facebook,如果用户是我们检索用户ID并查看它是否与db中的行匹配,如果我们存储会话变量并且用户已登录。如果不是,然后我们显示一个登录表单。

    4. 要检索Facebook用户ID,我使用以下代码:

      <?php
      require_once("facebook.php");
      
      $config = array();
      $config['appId'] = 'app id';
      $config['secret'] = 'secret app id';
      $facebook = new Facebook($config);
      
      $uid = $facebook->getUser();
      ?>
      

      问题

      1. 这是正确而安全的方式吗?
      2. 如果没有,你能指出我正确的方向吗?
      3. 在获得用户ID之前,用户需要允许我的应用,对吗?
      4. 上面的代码适用于localhost,但不适用于我的服务器,每次都返回0。溶液
      5. 提前致谢!

2 个答案:

答案 0 :(得分:5)

回答: 我认为你走在正确的轨道上。您还可以确保登录的[本机用户]可以访问注册页面并将FB帐户加入推送到用户个人资料页面或类似内容。

  1. 您可以轻松获取用户ID,因为它是facebook为所有注册帐户提供的公开信息。但该用户需要允许您的应用程序才能从Facebook个人资料中获取他们的信息。但好消息是,几乎所有的工作都是由Facebook为你完成的,你只需要将用户指向正确的网址即可。还有一个社交插件,您可以使用Facebook register social plugin
  2. 在您的网站/应用上注册用户

    如facebook api文档中所述,$uid将包含当前用户[浏览您的网站]的Facebook用户ID,或者在调用$uid = $facebook->getUser();

    后为null

    首先,您可以检查$ uid是否有效[not null或zero]。然后,如果通过该测试,您可以尝试通过发出$user = $facebook->api('/me')来检索公共个人资料信息。如果已经登录到Facebook,那应该为您提供用户个人资料。如果没有,则用户可能拥有Facebook帐户但未登录。

      

    请注意,如果未传递正确的令牌,api('/ me')可能会抛出异常,因此您应该将其包装在try-catch块中并根据您的应用程序处理异常。[也许假设用户未登录。如果您确定您的app_id和密码ID有效]

    如果$ user为null,则可以通过调用$loginUrl = $facebook->getLoginUrl()将用户重定向到[for facebook login]并重定向用户或提供可点击的URL链接。

    所有这些都记录在facebook api documentation

    示例代码:

    <?php
    require_once("facebook.php");
    
    $config = array();
    $config['appId'] = 'app id';
    $config['secret'] = 'secret app id';
    $facebook = new Facebook($config);
    
    $uid = $facebook->getUser();
    
    if( ! $uid){ // we have an id
    
        try{
            $user = $facebook->api('/me'); //get the current user's FB public profile
            if($user){ // we have a valid user who is logged in to his facebook account
                $logoutURL = $facebook->getLogoutUrl(); // user 
             }
        }catch(FacebookApiException $e){
            $user = null;
            $loginURL = $facebook->getLoginUrl();
        }
    }
    

    所有这些都记录在facebook PHP客户端中,因此它是您开始的最佳选择。 Facebook在没有太多通知的情况下更改其api,因此您应该访问他们的开发人员页面,以防您的代码开始出现奇怪的行为。

    希望它有所帮助!

答案 1 :(得分:1)

答案1:它是正确的方法, 答案2:使用php sdk,它已经拥有了保护你的fb登录的一切。 答案3:是的,用户需要在用户ID之前允许您的应用。 答案4:可能是因为您没有在Facebook上创建应用程序并使用演示文件中的代码。演示文件链接到网站网址为localhost的应用。 因此,要解决此问题,请在Facebook上创建一个应用程序,提供一个站点URL(服务器的URL)。 然后它应该工作:))

欢迎提出更多问题:)