CodeIgniter 之第三方登录
昨天刚刚把第三方登录做好,里面包含了微博,github,qq,豆瓣。
使用了一个国外的oauth2.0的登录类库:
看看文件:
oauth_client 是请求授权的客户端,主要是进行post,get请求,获取code及token,还有个重要的功能是组装header等授权码。
oauth_lib 主要是调用使用。
我们先来看看如何调用的:
class Oauth extends CI_Controller
{
function __construct ()
{
parent::__construct();
}
function index ()
{
redirect();
}
function login()
{
$this->load->config('oauth');
$site = $this->uri->segment('3');
$this->load->library('oauth_lib');
$this->oauth_lib->login($site);
}
}
首先,引导用户进来了一个可以提供第三方登录的页面:如:http://www.aboutit.cn/welcome/index 本站测试用的。
进入到了login方法,加载了oauth的配置:
调用了类库的方法:
function login($site)
{
if($site && array_key_exists ($site, $this->sitesConfig))
{
$siteConfig = $this->sitesConfig[$site];
if(strlen($siteConfig['client_id']) == 0 || strlen($siteConfig['client_secret']) == 0)
{
lv('lib/oauth/configError');
return;
}
$this->oauth_client->server = $site;
$this->oauth_client->redirect_uri ='http://www.aboutit.cn/oauth/login/'.$site;
$this->oauth_client->client_id = $siteConfig['client_id'];
$this->oauth_client->client_secret = $siteConfig['client_secret'];
$this->oauth_client->scope = $siteConfig['scope'];
if(($success = $this->oauth_client->Initialize()))
{
if(($success = $this->oauth_client->Process()))
{
if(strlen($this->oauth_client->authorization_error))
{
$oauth_client->error = $this->oauth_client->authorization_error;
$success = false;
}
elseif(strlen($this->oauth_client->access_token))
{
$success = true;
}
}
$success = $this->oauth_client->Finalize($success);
}
if($success)
{
$this->snsUserInfo($site);
}
else
{
echo HtmlSpecialChars($this->ci->oauth_client->error);
}
}
}
类库首先进行了初始化,然后进行处理;注意:引导用户进入的oauth/login/github URL也是服务器配置的URL(回调地址),也就是说,获取到了code之后,还是回调oauth/login/github;
客户端进行的工作流程是;
初始化各个第三方的登录配置--->如果是第一次请求,获取code----->如果是第二次回调回来,则获取到了token----->利用获取用户的信息;
在实现的过程中,需要注意几个问题;
一个是第三方返回的数据格式?
二个是第三方请求的方式,是POST还是GET;此处我该了一个功能,因为原本的类库中,没有这个选项;
三个是第三方的请求链接是什么???
微博,github,豆瓣,qq中,qq的第三方的接口非常乱。
但是这三个URL的链接,我已经配置到了oauth_lib里了,大家可以直接使用。
附件地址;
http://pan.baidu.com/s/1i3j6BKL