CodeIgniter 之第三方登陸

昨天剛剛把第三方登陸作好,裏面包含了微博,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/1i3j6BKL​server

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

相關文章
相關標籤/搜索