網站第三方登錄
//先從數據表中看是否綁定過
$token = logic("Oauth")->getAuthToken($this->member['uid'],$action);
if(!empty($token)){
$token = json_encode($token);
$token = str_encrypt($token);
$this->shareback($action,$token);
}else{
//中獎後分享參數
if($_GET['prize']){
$callback=__URL_JUANPI__.'/act/shareback?prize='.$_GET['prize'];
}else{
$callback=__URL_JUANPI__.'/act/shareback';
}
//未綁定過跳往User/OauthAction.class.php的connect方法
redirect(__URL_MEMBER__."/oauth/connect?type={$action}&callback={$callback}");
}
咱們來看OAUTH的connect方法,這個是受權的核心入口,你們會發現這裏貌似沒有callback地址,也就是客戶重新浪登錄後得到accesstoken後的回調地址
public function connect($type,$callback){
//緩存回調地址
cookie('callback_'.$type,$callback);
cookie('callback_cancel',$_SERVER['HTTP_REFERER']);
//加載ThinkOauth類並實例化一個對象
import("ORG.ThinkSDK.ThinkOauth");
$auth = ThinkOauth::getInstance($type);
//跳轉到受權頁面
$url=$auth->getRequestCodeURL();
$type=='taobao' && I('view')=='wap' && $url.='&view=wap';
redirect($url);
}
你們能夠看ThinkOauth.class.php的getRequestCodeURL方法,能夠發現這個讀取了系統配置的CALLBACK地址,這個地址在conf/oauth.php能夠看到,其實也就是寫在connect方法下面的callback方法,這個方法會調用$token = $auth->getAccessToken($code , $extend);去獲取token
客戶端這塊包括網頁登錄跟端登,網頁登錄客戶端會調用oauthaction的web_connect方法
public function web_connect($params){
//請求驗證
empty($params['type']) && $this->error(2001,'受權類型錯誤');
//重定向受權
$callback='http://api.juanpi.com/oauth/web/access';
redirect(__URL_OAUTH__."?view=wap&type={$params['type']}&callback={$callback}");
}
這裏定義了Callback方法,會跳往web_access方法而不是咱們配置中的callback方法
php