昨天刚刚把第三方登陆作好,里面包含了微博,github,qq,豆瓣。
使用了一个国外的oauth2.0的登陆类库:
看看文件:
oauth_client 是请求受权的客户端,主要是进行post,get请求,获取code及token,还有个重要的功能是组装header等受权码。
oauth_lib 主要是调用使用。
咱们先来看看如何调用的:php
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的配置:
调用了类库的方法:git
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;github
客户端进行的工做流程是;服务器
初始化各个第三方的登陆配置--->若是是第一次请求,获取code----->若是是第二次回调回来,则获取到了token----->利用获取用户的信息;post
在实现的过程当中,须要注意几个问题;测试
一个是第三方返回的数据格式?
二个是第三方请求的方式,是POST仍是GET;此处我该了一个功能,由于本来的类库中,没有这个选项;
三个是第三方的请求连接是什么???this
微博,github,豆瓣,qq中,qq的第三方的接口很是乱。code
可是这三个URL的连接,我已经配置到了oauth_lib里了,你们能够直接使用。
附件地址;
http://pan.baidu.com/s/1i3j6BKLserver