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