我想将facebook登录添加到我现有的登录系统并记住我,我知道它应该如何工作:
检查用户是否登录到facebook,用户是否检索用户ID并检查其是否已连接到任何帐户.如果我们得到一些数据并存储会话变量并且用户已登录.
如何注册
用户点击注册,用户进入一个页面,有两个选项注册并注册Facebook.
如果用户选择使用facebook注册,则会自动填写一些信息(如电子邮件),然后用户需要填写密码和缺口.然后我们验证信息,如果它有效我们存储用户+ facebook用户ID.如果用户选择注册,我们不会自动填充,当然也不会存储Facebook用户ID.
如何检查用户是否已登录:
检查是否设置了会话变量,如果是用户已登录.如果没有,则继续执行步骤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();
?>
Run Code Online (Sandbox Code Playgroud)
问题
提前致谢!
答案:1.我认为你走在正确的轨道上.您还可以确保登录的[本机用户]可以访问注册页面并将FB帐户联接推送到用户配置文件页面或类似的内容.
如facebook api文档中所述,$uid将包含当前用户[浏览您的网站]的facebook用户ID或调用后的null$uid = $facebook->getUser();
首先,您可以检查$ uid是否有效[not null或zero].然后,如果通过该测试,您可以尝试通过发出一个来检索公共配置文件信息$user = $facebook->api('/me').如果已经登录到Facebook,那应该为您提供用户个人资料.如果没有,则用户可能拥有Facebook帐户但未登录.
请注意,如果未传递正确的令牌,api('/ me')可能会抛出异常,因此您应该将其包装在try-catch块中并根据您的应用程序处理异常.[也许假设用户不是登录.如果您确定您的app_id和密码有效]
如果$ user为null,那么您可以通过调用$loginUrl = $facebook->getLoginUrl()和重定向用户或提供可点击链接到URL 来获取URL以将用户重定向到[for facebook login] .
所有这些都记录在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();
}
}
Run Code Online (Sandbox Code Playgroud)
所有这些都记录在facebook PHP客户端中,因此它是您开始的最佳选择.Facebook在没有太多通知的情况下更改其api,因此您应该访问他们的开发人员页面,以防您的代码开始出现奇怪的行为.
希望能帮助到你!