OAUTH的思路

網站第三方登錄
//先從數據表中看是否綁定過
$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

相關文章
相關標籤/搜索