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​

[3]http://www.aboutit.cn/blog/show/27

posted @ 2014-10-24 17:01  lifer  阅读(1098)  评论(1编辑  收藏  举报
程序员看世界