Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将facebook登录添加到现有登录系统_Php_Facebook - Fatal编程技术网

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

Php 将facebook登录添加到现有登录系统,php,facebook,Php,Facebook,我想用Remembery me将facebook登录添加到我现有的登录系统中,我知道它应该如何工作: 短版 检查用户是否登录到facebook,如果用户是我们检索的用户id,并检查它是否连接到任何帐户。如果是,我们会获取一些数据并存储会话变量,然后用户登录 长版本 如何注册 用户点击注册,用户进入一个页面,页面上有两个选项:注册和使用facebook注册 如果用户选择注册facebook,则某些信息将自动填写(如电子邮件),然后用户需要填写密码和密码。然后我们验证信息,如果有效,我们存储用户+f

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

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

长版本 如何注册

  • 用户点击注册,用户进入一个页面,页面上有两个选项:注册和使用facebook注册


  • 如果用户选择注册facebook,则某些信息将自动填写(如电子邮件),然后用户需要填写密码和密码。然后我们验证信息,如果有效,我们存储用户+facebook用户id。如果用户选择注册,我们不会自动填充,当然也不会存储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();
    ?>
    
  • 检查是否设置了会话变量,如果用户已登录。如果没有,则转至步骤2

  • 检查是否存在带有“记住我”代码的cookie。如果它存在,我们检查代码是否有效,如果它是,那么用户正在登录。如果cookie不存在,那么我们继续执行步骤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();
    ?>
    
    
    
    问题

  • 这是正确和安全的方法吗
  • 如果没有,你能告诉我正确的方向吗
  • 在我获得用户id之前,用户需要允许我的应用,对吗
  • 上面的代码可以在localhost上运行,但不能在我的服务器上运行,它每次都返回0。解决方案
  • 提前谢谢

    答案: 1.我认为你在正确的轨道上。您还可以确保登录的[本地用户]可以访问注册页面,并将FB帐户加入到用户配置文件页面或类似页面

  • 你可以很容易地获得用户id,因为它是facebook为所有注册帐户提供的公共信息。但该用户需要允许你的应用程序才能从facebook个人资料中获取他们的信息。但好消息是,几乎所有的工作都是由facebook为您完成的,您只需将用户指向正确的url即可。还有一个社交插件,你可以使用它在你的网站/应用上注册用户
  • 如facebook api文档中所述,
    $uid
    将包含当前用户[浏览您的网站]的facebook用户id,或者在调用
    $uid=$facebook->getUser()后为null

    首先,您可以检查$uid是否有效[不为null或零]。然后,如果is通过了该测试,您可以通过发出
    $user=$facebook->api('/me')
    来尝试检索公共配置文件信息。如果用户已经登录到facebook,则应提供您的用户配置文件。如果没有,那么用户可能有一个facebook帐户,但没有登录

    请注意,如果未传递正确的令牌,api(“/me”)可能引发异常,因此您应该将其包装在try-catch块中,并根据您的应用处理异常。[可能假设用户未登录。如果您确定您的应用程序\u id和机密id有效]

    如果$user为null,则您可以通过调用
    $loginUrl=$facebook->getLoginUrl()
    获取url以将用户重定向到[用于facebook登录],并重定向用户或提供指向url的可单击链接

    所有这些都记录在

    示例代码:

    <?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();
        }
    }
    

    回答1:这是正确的方法, 回答2:使用PHPSDK,它已经具备了保护fb登录的所有功能。 回答3:是的,用户需要先允许您的应用,然后才能访问用户id。 回答4:可能是因为你没有在facebook上创建应用程序,也没有使用演示文件中的代码。演示文件链接到一个应用程序,该应用程序的站点url为
    localhost
    。 所以,要解决这个问题,在facebook上创建一个应用程序,给出一个站点url(服务器的url)。 那么它应该会起作用:)


    欢迎提出更多问题:)

    “如果用户选择使用facebook注册,则某些信息将自动填写(如电子邮件),然后用户需要填写密码和nick。”您的思路正确,但我只是想说,让用户在已经使用facebook凭据登录时设置密码会适得其反。用户选择Facebook登录按钮是因为它比管理不同站点的多个密码更简单、更安全。谢谢您的评论!我希望用户设置密码有几个原因。1.我不想依赖其他服务。2.如果我有时选择删除facebook,那么许多帐户将丢失。3.用户停用facebook帐户,则用户无法登录我的网站。4.当用户更改电子邮件、密码等内容时,用户需要输入密码。但我想要facebook登录,这样用户只需按一个按钮即可登录。谢谢您的评论!我有和应用程序,我已经填写了所有必需的信息。在本地主机上可以工作,在服务器A上可以工作,但在服务器B上不工作。当我在服务器上测试它时,我已经更改了所需的信息。谢谢你的回答!是的,这确实帮了我的忙!它现在起作用了,当用户登录时,我得到了id,当用户从facebook注销时,用户就在我的网站上注销了。当用户从我的网站注销时,用户仍然在facebook上登录。所以它就像我想要的那样工作。我只有一个“问题”,那就是保持用户登录。我想唯一的解决方案是创建一个唯一的代码,就像我为使用user/pw登录并选中rembember me的用户所做的那样。如果您不想在每个请求上查询Facebook API,即使用户同时登录到两个Faceboo