小程序?qū)崿F(xiàn)Token生成與驗證
流程
每次請求接口攜帶token,進(jìn)行驗證
1.驗證成功則返回接口數(shù)據(jù)
2.驗證失敗(token過期),小程序重新請求生成新的token,然后請求之前的接口
key值: 隨機(jī)數(shù)+時間戳+鹽
value值: id+session_key+openid
演示
小程序端
<view> <button bindtap="loadToeknData">攜帶token請求數(shù)據(jù)</button> </view>
Page({ data: { }, onLoad:function(){ // this._loadData(); }, //生成token setToken:function(callback){ // wx.setStorageSync('token', "sfspx64w8x47w14x3zX4x4wf4") var that = this; wx.request({ url: 'http://2021xcx-api.com/api/gettoken', method: 'POST', success: function(res){ console.log(res.data); var data = res.data; if(data.code==1){ //更新新獲取的token值 wx.setStorageSync('token', data.token); // 執(zhí)行回調(diào)函數(shù) callback&&callback() }else{ that.setToken(); } } }) }, loadToeknData:function(){ var that = this; wx.request({ url: 'http://2021xcx-api.com/api/orders', method: 'POST', header: { 'content-type': 'application/json', 'token': wx.getStorageSync('token') }, success: function(res){ var data = res.data; console.log(data) if(data.code==903){ // token過期,重新請求設(shè)置 // 攜帶回調(diào)函數(shù),token重新獲取后繼續(xù)執(zhí)行此方法。 that.setToken(that.loadToeknData) } } }) }, })
??
后端接口
路由配置
<?php Route::post("api/orders", "api/index/getOrders"); // Token Route::post("api/gettoken", "api/token/createToken");
Index.php
<?php namespace app\api\controller; use app\api\controller\Token; use think\Cache; class Index extends Token { public function getOrders(Token $token){ $token->verifyToken(); $data['orders'] = [ 'id' => 1, 'title' => 'apple', 'time' => time() ]; echo json_encode($data); } }
Token.php
<?php namespace app\api\controller; use think\Controller; class Token extends Controller { protected $returnParam = [ 'code' => 1, 'msg' => '請求失敗' ]; /** * [verifyToken 驗證Token是否攜帶并存在] * @return [type] [description] */ public function verifyToken(){ $token = request()->header()['token']; $isSetToken = cache($token); // dump($isSetToken);die; if(!$isSetToken){ $this->returnParam['code'] = 903; $this->returnParam['msg'] = "Token驗證失敗"; echo json_encode( $this->returnParam );die; } } /** * [createToken Token生成] * tip:token中記錄用戶ID/session_kye/openid * @return [type] [description] */ public function createToken() { $randStr = rand(1,9999); $time = time(); $sale = "xixi2021"; // * 此處模擬--未請求微信接口進(jìn)行sessionkey及openid的獲取 $tokenValue = [ 'uid' => 1, 'session_key' => '84848aasa', 'openid' => '20oxl65wc4d4s5x7hwc', 'code' => 'sssaaeee' ]; $tokenKey = md5($randStr.$time.$sale); //緩存存儲token數(shù)據(jù) cache($tokenKey, json_encode($tokenValue), 1); $returnParam = [ 'code' => 1, 'token' => $tokenKey ]; echo json_encode($returnParam); } }
到此這篇關(guān)于小程序?qū)崿F(xiàn)Token生成與驗證的文章就介紹到這了,更多相關(guān)小程序 Token生成與驗證內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
js中forEach的用法之forEach與for之間的區(qū)別
這篇文章主要介紹了js中forEach的用法之forEach與for之間的區(qū)別,forEach() 調(diào)用數(shù)組的每個元素,并將元素傳遞給回調(diào)函數(shù),下面更多詳細(xì)介紹需要的小伙伴可以參考一下2022-03-03頁面下沉抖動效果-網(wǎng)站HTTP連接沒有效果-PC上有效果
頁面下沉抖動效果實現(xiàn)代碼,代碼少,功能還可以2008-05-05