6

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

精简版

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

长版

如何注册

  1. 用户点击注册,用户来到一个页面,有两个选项注册和使用 facebook 注册。

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

如何检查用户是否登录:

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

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

  3. 检查用户是否在 facebook 登录如果用户是我们检索用户 ID 并查看它是否与 db 中的行匹配如果它存储会话变量并且用户已登录。如果没有,那么我们显示登录形式。

要检索 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。解决方案?

提前致谢!

4

2 回答 2

5

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

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

如 facebook api 文档中所述,$uid将包含当前用户 [browsing your site] 的 facebook 用户 ID,或在调用$uid = $facebook->getUser();

因此,首先,您可以检查 $uid 是否有效 [不是 null 或零]。然后,如果它通过了该测试,您可以尝试通过发出$user = $facebook->api('/me'). 如果您已经登录到 Facebook,那应该会为您提供用户个人资料。如果没有,那么用户可能有一个 facebook 帐户但没有登录。

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

$loginUrl = $facebook->getLoginUrl()如果 $user 为空,那么您可以通过调用和重定向用户或提供指向 URL 的可点击链接来获取将用户重定向到 [for facebook login] 的url。

所有这些都记录在facebook api 文档中

示例代码:

<?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,因此您应该访问他们的开发人员页面,以防您的代码开始出现异常行为。

希望能帮助到你!

于 2012-04-13T01:53:36.110 回答
1

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

欢迎更多问题:)

于 2012-04-13T02:12:16.733 回答