久久99久久人婷婷精品综合_超碰aⅴ人人做人人爽欧美_亚洲电影第三页_日韩欧美一中文字暮专区_波多野结衣的一区二区三区_婷婷在线播放_人人视频精品_国产精品日韩精品欧美精品_亚洲免费黄色_欧美性猛交xxxxxxxx

php如何設置token

php設置token的方法:首先定義獲取Token的路由路徑;然后建立Service層;接著在Model層里建立User類,并在驗證器類和異常類創建相應的驗證方法和異常處理;最后完成Token令牌的編寫即可。

創新互聯堅持“要么做到,要么別承諾”的工作理念,服務領域包括:做網站、網站制作、企業官網、英文網站、手機端網站、網站推廣等服務,滿足客戶于互聯網時代的黎城網站設計、移動媒體設計的需求,幫助企業找到有效的互聯網解決方案。努力成為您成熟可靠的網絡建設合作伙伴!

推薦:《PHP視頻教程》

我們開發的后端API接口會對訪問者有一個權限要求,比如一些包含私人信息的接口,就需要訪問者請求接口的同時,傳遞一個提前已經發放給訪問者的Token。

這就像一個令牌一樣,只有訪問者展示出來我們才會“通過放行”。

下面就記錄一下權限令牌的代碼編寫思路。

一、流程概要

定義獲取Token的路由路徑,接受code參數(code來源:微信服務器,登錄系統基于微信體系)

建立Service層,在這層里創建Token基類和UserToken類

UserToken類處理整個邏輯:Token生成和返回

在Model層里建立User類,負責用戶數據表的讀寫,供Service層的UserToken調用

在驗證器類和異常類創建相應的驗證方法和異常處理

控制器->Service層->Model層返回值給Service層->Service層返回值給控制器,整個流程完成Token令牌的編寫

二、具體說明

首先定義好路由路徑:

Route::post(    'api/:version/token/user',    'api/:version.Token/getToken');

然后創建Token控制器,定義對應路由路徑的getToken方法:

public function getToken($code='') {
        (new TokenGet())->goCheck($code); // 驗證器        $token = (new UserToken($code))->get();        return [            'token' => $token
        ];
    }

在調用Service層之前,還得檢查一下傳遞過來的參數,于是定義TokenGet這個驗證器:

class TokenGet extends BaseValidate
{
    protected $rule = [      'code' => 'require|isNotEmpty'
    ];
 
    protected $message = [        'code' => '需要code才能獲得Token!'
    ];
 }

回到Token控制器,驗證通過后,我們調用Service層定義的UserToken類:

$token = (new UserToken($code))->get();

這里討論一下Service層和Model層。我們普遍的理解是Service層是基于Model層的一次抽象封裝。

Model層只負責操作數據庫并返且返回給Service層

然后Service層處理業務邏輯,最后返回給Controller層

但我覺得小項目的話,Service其實和Model就有點平級的意思,因為有些簡單的接口Model層直接對接Controller就可以了,只有相對復雜的接口,比如用戶權限,就可以再經過Service層分隔不同功能的代碼。

這樣的處理更加靈活,有大量確實很簡單的接口就不用過一次Service層了,這樣更像是走過過場而已,沒什么意義了。

回到Service層的代碼編寫,由于Token還會有不同的種類,所以先創建一個Token基類,里面包含一些通用的方法。然后就是給訪問者返回令牌的UserToken類的編寫了。

由于是基于微信,我們需要三個信息:code,appid,appsecret,然后通過構造函數來給UserToken類賦上初始值:

function __construct($code) {    $this->code = $code;    $this->wxAppID = config('wx.app_id');    $this->wxAppSecret = config('wx.app_secret');    $this->wxLoginUrl = sprintf(
        config('wx.login_url'),        $this->wxAppID, $this->wxAppSecret, $this->code
    );
    }

然后把這三個放入微信提供的接口的參數位置,目的是獲得一個完整的微信服務器端的url,請求到我們需要的openid。

然后是通過發送網絡請求的步驟就在此略過。微信服務器會返回包含openid的對象,判斷這個對象的值沒問題后,我們就開始生成令牌的步驟了,創建函數grantToken():

private function grantToken($openidObj) {
 
        // 取出openid        $openid = $openidObj['openid'];
           // 通過Model層調用數據庫,檢查openid是否已經存在        $user = UserModel::getByOpenID($openid);
           // 如果存在,不處理,反之則新增一條user記錄        if ($user) {            $uid = $user->id;
        } else {
            // 不存在,生成一條數據,具體方法略過            $uid = $this->newUser($openid); 
        }
           // 生成令牌,寫入緩存(具體方法見下面的定義)        $cachedValue = $this->prepareCacheValue($openidObj, $uid);        $token = $this->saveToCache($cachedValue);
           // 令牌返回到調用者端        return $token;
}
 
private function prepareCacheValue($openidObj, $uid) {    $cachedValue = $openidObj;    $cachedValue['uid'] = $uid;    $cachedValue['scope'] = 16; // 權限值,自己定義    return $cachedValue;
}
     
private function saveToCache($cachedValue) {    $key = self::generateToken(); // 生成令牌的方法    $value = json_encode($cachedValue);    $tokenExpire = config('setting.token_expire'); // 設定的過期時間    $request = cache($key, $value, $tokenExpire);        if (!$request) {
            throw new TokenException([            'msg' => '服務器緩存異常',            'errorCode' => 10005
        ]);
    }    return $key; // 返回令牌:token
}

可以看到,核心流程就是:

拿到openid

查看數據庫,檢查openid是否已經存在

如果存在,不處理,反之則新增一條user記錄

生成令牌,準備緩存數據,寫入緩存

把令牌返回到客戶端去

其中generateToken()這個方法詳細定義如下:

public static function generateToken() {    $randomChars = getRandomChars(32); // 32個字符組成一組隨機字符串    $timestamp = $_SERVER['REQUEST_TIME_FLOAT'];$salt = config('security.token_salt'); // salt 鹽
    // 拼接三組字符串,進行MD5加密,然后返回    return md5($randomChars.$timestamp.$salt);
}    
function getRandomChars($length) {    $str = null;    $strPoll = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';    $max = strlen($strPoll) - 1;    for ($i = 0; $i < $length; $i++) {        $str .= $strPoll[rand(0, $max)];
    }    return $str;
}

它的主要作用毫無疑問就是生成我們的需要的令牌——Token字符串。值得一提的是由于generateToken()在其他類型的Token里也會用到,所以是放在Token基類里的。

至此,只需要把生成的令牌再返回到Controller就行了。

三、總結

令牌的編寫涉及到很多的流程,為了避免混亂,一定要注意把負責不同工作的代碼分別定義在不同的方法里。就像上面例子里grantToken()方法體現的那樣,這是個核心方法,包含所有流程,但是不同的具體流程又定義在其他方法里,然后提供給grantToken()方法調用。

這樣做之后grantToken()方法即使包含所有流程,但也依然很容易閱讀。

當前題目:php如何設置token
文章分享:http://www.js-pz168.com/article16/cgjjdg.html

成都網站建設公司_創新互聯,為您提供網站營銷云服務器網站改版域名注冊品牌網站建設移動網站建設

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

搜索引擎優化
久久99久久人婷婷精品综合_超碰aⅴ人人做人人爽欧美_亚洲电影第三页_日韩欧美一中文字暮专区_波多野结衣的一区二区三区_婷婷在线播放_人人视频精品_国产精品日韩精品欧美精品_亚洲免费黄色_欧美性猛交xxxxxxxx
日本亚洲自拍| 91精品国产综合久久婷婷香蕉| 欧美日韩亚洲另类| 久久麻豆一区二区| 亚洲一二三四区不卡| 国产精品99久久久久久有的能看| 国产高清在线一区二区| 亚洲欧美日韩综合一区| 欧美刺激午夜性久久久久久久| 亚洲婷婷综合色高清在线| 久久精品av麻豆的观看方式| 91小视频免费观看| 亚洲精品永久www嫩草| 日韩女优av电影| 亚洲在线中文字幕| 国产91精品在线观看| 欧美日韩一区在线观看视频| 7799精品视频| 亚洲精品老司机| 成人小视频免费在线观看| 日韩av高清在线播放| 欧美一卡2卡3卡4卡| 一区二区视频免费在线观看| 国产福利精品导航| 欧美一区二区高清在线观看| 制服丝袜在线91| 夜夜嗨av一区二区三区四季av| 国产99久久久精品| 亚洲国产欧美日韩| 国产亚洲福利社区一区| 免费xxxx性欧美18vr| 国产伦精品一区二区三| 欧美日韩国产天堂| 一区二区三区四区不卡在线| 成人国产一区二区三区精品| 亚洲自拍三区| 国产精品伦理在线| 国产精品影音先锋| 亚洲春色在线视频| 国产日产欧美精品一区二区三区| 麻豆91在线观看| 欧美福利精品| 久久综合999| 久久机这里只有精品| 久久人人97超碰人人澡爱香蕉| 6080国产精品一区二区| 亚洲一区二区精品3399| 99久久久精品免费观看国产蜜| 色视频成人在线观看免| 国产精品成人一区二区艾草 | 国产精品伦理一区二区| 国产一区二区福利| 亚洲女人毛片| 国产精品久久久久影院老司| 粉嫩av一区二区三区| 91国模大尺度私拍在线视频 | 国产精品你懂的在线| 精品一区二区成人精品| 99re成人精品视频| 欧美日韩精品专区| 亚洲一区二区精品久久av| 豆国产97在线| 日韩精品一区二区三区视频播放| 青青草视频一区| 欧美裸体网站| 国产农村妇女毛片精品久久麻豆| 国产寡妇亲子伦一区二区| 色婷婷激情综合| 亚洲一区影音先锋| 久久99影院| 国产日韩在线不卡| 成人av在线一区二区| 欧美日韩www| 欧美a级理论片| 亚洲精品久久久久久一区二区| 中文字幕一区免费在线观看| 99精品久久99久久久久| 日韩欧美在线1卡| 国产一区在线看| 色8久久精品久久久久久蜜| 一区二区三区四区国产精品| 国精产品一区二区| 国产网站一区二区| 国产成人av电影在线播放| 一本一本久久a久久精品综合麻豆| 亚洲黄色在线视频| 乱一区二区三区在线播放| 国产精品乱人伦| 成人黄视频免费| 久久久精品国产免大香伊| www.亚洲色图.com| 日韩欧美一级二级三级久久久| 狠狠色丁香婷婷综合| 在线观看视频一区| 蜜桃传媒麻豆第一区在线观看| 一区二区在线观看av| 成人aaaa免费全部观看| 日韩视频在线观看一区二区| 国产精品综合在线视频| 欧美裸体一区二区三区| 国产主播一区二区三区| 欧美日韩国产一区二区三区地区| 美女网站一区二区| 在线一区二区三区| 日本午夜一区二区| 色综合久久久久| 蜜桃传媒麻豆第一区在线观看| 日本精品免费观看高清观看| 日本不卡在线视频| 欧美私模裸体表演在线观看| 久久精品国产精品青草| 欧美午夜精品免费| 国产在线精品一区二区三区不卡| 欧美日韩三级视频| 国产精品乡下勾搭老头1| 欧美一区二区三区小说| 成人午夜伦理影院| 精品不卡在线视频| 444亚洲人体| 国产精品美女久久久久av爽李琼| 精品乱色一区二区中文字幕| 亚洲欧美日韩久久| 亚洲春色在线| 美女任你摸久久| 7777精品伊人久久久大香线蕉完整版| 国产成人免费视频一区| 欧美哺乳videos| 成人av资源网| 亚洲视频在线一区二区| 色一情一乱一伦一区二区三区丨| 午夜精品久久久久久久99樱桃| 色88888久久久久久影院按摩 | 久久久久久免费毛片精品| 波多野结衣成人在线| 亚洲天堂av老司机| 亚洲欧美综合一区| 精品在线一区二区三区| 日韩三级av在线播放| 91网免费观看| 亚洲精品日韩专区silk| 亚洲午夜精品国产| 久久成人av少妇免费| 日韩欧美亚洲国产另类| 成人羞羞视频免费| 一区二区三区中文字幕电影| 一区二区三区在线视频看| 国产综合一区二区| 久久久久久久久97黄色工厂| 国产一区二区三区高清视频| 亚洲午夜久久久久久久久久久| 在线亚洲+欧美+日本专区| 成人少妇影院yyyy| 国产精品美女久久久久久久久 | 国产精品久久亚洲7777| 亚洲已满18点击进入久久| 欧美自拍偷拍午夜视频| a亚洲天堂av| 亚洲欧美日韩国产综合在线 | 日韩福利视频导航| 日韩一区二区精品| 国产一区二区三区色淫影院 | 成人做爰69片免费看网站| 国产欧美日韩另类一区| 婷婷五月色综合| 国产精品亚洲综合一区在线观看| 高清日韩一区| 亚洲精品高清视频在线观看| 欧美在线观看一二区| 91一区二区三区在线播放| 亚洲最色的网站| 亚洲成人动漫在线免费观看| 日韩在线三区| 国产成人a级片| 国产精品国产自产拍在线| 色综合天天狠狠| 成人av在线看| 亚洲激情综合网| 欧美精品第一页| 激情五月综合色婷婷一区二区| 日韩精品午夜视频| 精品国产青草久久久久福利| 日产精品一线二线三线芒果| 国产成人午夜电影网| 综合av第一页| 欧美亚洲综合在线| 俄罗斯精品一区二区三区| 日韩高清不卡在线| 国产视频一区二区三区在线观看 | 91在线你懂得| 首页国产丝袜综合| 亚洲精品在线电影| 一区二区三区欧美成人| 97久久精品人人做人人爽50路| 亚洲电影一区二区三区| 欧美变态tickle挠乳网站| 亚洲第一导航| 99国产视频在线| 久久av中文字幕片| 亚洲天天做日日做天天谢日日欢| 欧美巨大另类极品videosbest |