gmnon.cn-疯狂蹂躏欧美一区二区精品,欧美精品久久久久a,高清在线视频日韩欧美,日韩免费av一区二区

站長資訊網
最全最豐富的資訊網站

thinkPHP配置jwt(代碼實例)

thinkPHP配置jwt(代碼實例)

thinkphp5.1-jwt的安裝與使用

安裝jwt插件

在composer.json的require中加入如下配置

"firebase/php-jwt": "^5.0"

在項目根目錄下執行composer update即可.

創建一個auth中間件

php think make:middleware Auth

打開applicationhttpmiddlewareAuth文件

<?php namespace apphttpmiddleware; use FirebaseJWTJWT; use FirebaseJWTSignatureInvalidException; use thinkexceptionTokenException; use thinkexceptionValidateException; use think acadeCache; use think acadeConfig;  class Auth {  public function handle($request, Closure $next)  {  $bearer_token = [];  $bearer = $request->header('authorization');//取header中的token  if ($bearer !== null) {  //不空嘗試去匹配  preg_match('/bearers*(S+)/i', $bearer, $bearer_token);  }  if (empty($bearer_token[1])) {  //匹配不到結果嘗試去url中獲取  if ($request->param('token') !== null) {  $token = $request->param('token');  }else{  throw new TokenException('請登錄', 401);  }  }else{  $token=$bearer_token[1];  }  try {  $de_token = JWT::decode($token, Config::get('JWT_KEY'), Config::get('JWT_ENCRYPTION'));  } catch (SignatureInvalidException $exception) {  //捕獲JWT解析錯誤  throw new TokenException('無效令牌', 401);  } catch (Exception $exception) {  throw new TokenException('請重新登錄', 401);  }  if ($de_token->voe < time() && $de_token->exp > time()) {  throw new TokenException('請換取新令牌', 402);  } else if ($de_token->voe < time()) {  throw new TokenException('請重新登錄', 401);  }  if (Cache::tag('login')->get('token_' . $de_token->data->uid) != $token) {  throw new TokenException('用戶信息錯誤,請重新登錄', 401);  }  if ($de_token->data->is_ban == 1) {  throw new ValidateException('該賬戶已被封禁');  }  $request->auth = $de_token->data->uid;  return $next($request);  } }

創建一個控制器Login
php think make:controller login/Login --plain
代碼如下

<?php namespace applogincontroller; use appcommonhelp; use appcommonserviceOperationToken; use thinkController; use thinkDb; use thinkRequest; class Login extends Controller {  public function login(Request $request)  {  $info = Db::name('user')->field('id,uuid,nick,gender,icon,im_accid,im_icon,is_ban')->where('del_time', '=', '0')->where(['mobile' => $request->param('phone'), 'password' => md5($request->param('password'))])->findOrEmpty();  if ($info == null || empty($info)) {  return help::errJsonReturn('賬號或密碼錯誤');  }  $token = OperationToken::crearToken($info['id'], $info['uuid'], $info['is_ban']);  return json([  'type' => 'Bearer ',  'access_token'=>$token['token'],  'exp_time'=>$token['exp'],  'voe_time'=>$token['voe'],  'iat_time'=>time()  ]);  } }

在application下新建common文件夾,在common下新建service文件夾,service文件夾下創建

OperationToken.php

<?php namespace appcommonservice; use thinkDb; use think acadeCache; use FirebaseJWTJWT; use think acadeConfig; class OperationToken {  public static function crearToken(int $uid, string $uuid, int $is_ban): array  {  $time = time();  $info_token = [  'iat' => $time,//簽發時間  'voe' => Config::get('TOKEN_VOE',7200) + $time,//換取有效時間  'exp' => Config::get('TOKEN_EXP',3600)+$time,//有效時間  'sign' => base64_encode($uuid),//簽名  'data' => [  'uid' => $uid,//用戶id  'is_ban' => $is_ban,//是否被禁用  ]  ];  $token = JWT::encode($info_token, Config::get('JWT_KEY'));  Cache::tag('login')->set('token_' . $uid, $token, Config::get('TOKEN_VOE',7200) + $time);  Db::name('user_login_log')->insert(  [  'uid'=>$uid,  'token'=>$token,  'iat_time'=>$time,  'ip'=>ip2long(request()->ip()),  'exp_time'=>Config::get('TOKEN_EXP',3600)+$time,  'voe_time'=> Config::get('TOKEN_VOE',7200) + $time  ]  );  return [  'token'=>$token,   'voe' =>Config::get('TOKEN_VOE',7200) + $time,  'exp' => Config::get('TOKEN_EXP',3600)+$time];  } }

config/app.php文檔末尾追加參數并接管錯誤控制

// 異常處理handle類 留空使用 thinkexceptionHandle 'exception_handle' => function ($e) {  //參數驗證錯誤  if ($e instanceof thinkexceptionValidateException) {  return json(['msg' => $e->getError()], 422);  }  //route未定義  if ($e instanceof thinkexceptionValidateException) {  return json(['msg' => $e->getMessage()], 404);  } //token過期/無效 401-令牌/賬號密碼錯誤 402-令牌過期可舊換新 403-無權限訪問  if ($e instanceof hinkexceptionTokenException) {  return json(['msg' => $e->getError()], $e->getCode());  } // 請求異常  if ($e instanceof HttpException && request()->isAjax()) {  return response(['msg' => $e->getMessage()], $e->getStatusCode());  }  },

thinkphp5.1-jwt的安裝與使用與路由參數驗證

在thinkphplibrary hinkexception下新建TokenException.php

代碼如下

<?php namespace thinkexception; class TokenException extends HttpException {  protected $error;  public function __construct($error, $code = 0)  {  $this->error = $error;  $this->message = $error;  $this->code = $code;  }  /**  * 獲取驗證錯誤信息  * @access public  * @return array|string  */  public function getError()  {  return $this->error;  } }

創建一個login的驗證器

php think make:validate login/Login

代碼如下

<?php namespace applogin validate;use thinkValidate;class Login extends Validate { /**  * 定義驗證規則  * 格式:'字段名' => ['規則1','規則2'...]  *  * @var array */  protected $rule = [ 'phone'=>'require|mobile',  'password'=>'require|length:4,12'  ];   /**  * 定義錯誤信息  * 格式:'字段名.規則名' => '錯誤信息'  *  * @var array */  protected $message = [ 'phone.mobile'=>'phone格式錯誤',  'password.length'=>'密碼長度錯誤'  ]; protected $scene=[ 'login'=>['phone','password']  ]; }

打開route/route.php

代碼如下

<?php use think acadeRoute; Route::get('/','index/Index/index'); Route::group('account',function (){  Route::post('/login','login/Login/login')->validate('applogin alidateLogin','login'); }); //需要驗證登錄 Route::group('api',function (){  Route::post('/user','index/Index/index'); })->middleware(apphttpmiddlewareAuth::class);

這里的middleware按照官方文檔是可以注冊到middleware.php中,但在測試中發現問題.路由不執行middleware方法在訪問時會由上至下順序執行middleware.php中注冊的所有中間件,因此改寫為middleware(apphttpmiddlewareAuth::class);去使用中間件在common下新建一個help.php

代碼如下

<?php namespace appcommon; class help {  public static function susJsonReturn(array $data=[],string $msg='請求成功',int $code=1)  {  return json([  'msg'=>$msg,  'data'=>$data,  'code'=>$code  ]);  }  public static function errJsonReturn(string $msg = '請求失敗', int $code = 0, array $data = [])  {  return json([  'msg'=>$msg,  'data'=>$data,  'code'=>$code  ]);  } }

到數據庫中新建一個數據庫,新建兩張表

CREATE TABLE `xn_user` (  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,  `uuid` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'uuid',  `password` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '登錄密碼',  `name` varchar(20) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '真實姓名',  `nick` varchar(8) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '昵稱',  `gender` enum('1','2','0') COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '0' COMMENT '用戶性別,0 表示未知,1 表示男,2 女表示女',  `regist_time` int(11) unsigned DEFAULT NULL,  `icon` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '頭像',  `mobile` char(11) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '手機號',  `im_accid` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'im賬號',  `im_icon` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'im頭像',  `im_email` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'im郵箱',  `im_birth` varchar(16) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'im生日',  `im_mobile` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'im手機號碼',  `create_time` int(11) unsigned DEFAULT '0',  `del_time` int(11) unsigned DEFAULT '0',  `is_ban` enum('0','1') COLLATE utf8mb4_unicode_ci DEFAULT '0' COMMENT '是否封號',  PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; CREATE TABLE `xn_user_login_log` (  `uid` int(11) NOT NULL DEFAULT '0' COMMENT '用戶id',  `token` text COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '登錄時的令牌',  `iat_time` int(11) DEFAULT '0' COMMENT '登錄時間',  `ip` bigint(20) unsigned DEFAULT '0' COMMENT '登錄ip-ip2long',  `exp_time` int(11) DEFAULT '0' COMMENT '失效時間',  `voe_time` int(11) DEFAULT '0' COMMENT 'token舊換新有效時間',  KEY `login_log_uid` (`uid`,`ip`,`token`(32)) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

推薦教程:《TP5》

贊(0)
分享到: 更多 (0)
?
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
gmnon.cn-疯狂蹂躏欧美一区二区精品,欧美精品久久久久a,高清在线视频日韩欧美,日韩免费av一区二区
jizz大全欧美jizzcom| 性鲍视频在线观看| 国产片侵犯亲女视频播放| 国内自拍第二页| 国产欧美一区二| 色黄视频免费看| 少妇熟女一区二区| 视色,视色影院,视色影库,视色网 日韩精品福利片午夜免费观看 | 制服丝袜综合网| 亚洲欧美aaa| 樱空桃在线播放| 日韩精品在线中文字幕| 免费无码毛片一区二三区| 国产午夜福利100集发布| 777精品久无码人妻蜜桃| 又粗又黑又大的吊av| 免费观看成人在线视频| 精品久久久99| 免费一级特黄毛片| 无码人妻丰满熟妇区毛片| 中文字幕日韩综合| 国产成人在线小视频| 久久久久免费精品| 91精品国产三级| 国产中文字幕二区| 涩多多在线观看| 黄色激情在线视频| 亚洲一区在线不卡| 国产一区二区片| 在线看的黄色网址| 妞干网视频在线观看| 亚洲狼人综合干| 999一区二区三区| 无限资源日本好片| 国产美女作爱全过程免费视频| 欧美日韩二三区| 蜜臀在线免费观看| 成人免费视频久久| 波多野结衣 作品| 亚洲36d大奶网| 国产日韩一区二区在线| 欧美激情第四页| 网站一区二区三区| 每日在线更新av| 久久国产午夜精品理论片最新版本| 亚洲欧美另类动漫| 免费无码av片在线观看| 国产一级做a爰片久久毛片男| 久久人人爽av| 小泽玛利亚视频在线观看| 欧美日韩在线一| 91免费国产精品| 免费观看黄色的网站| 国产三级精品三级在线| 手机看片福利盒子久久| 美女福利视频在线| 男人天堂999| 99久久激情视频| 蜜臀av午夜一区二区三区| 被灌满精子的波多野结衣| 欧洲在线免费视频| 久久精品国产露脸对白| 9久久婷婷国产综合精品性色| 欧美国产激情视频| 国产又黄又大又粗视频| 国产在线播放观看| 日韩精品 欧美| 免费看国产一级片| av动漫免费看| 色播五月综合网| 伊人成人免费视频| 一级性生活视频| 人妻av中文系列| 国产精品丝袜久久久久久消防器材| 水蜜桃色314在线观看| 97视频在线免费播放| 大香煮伊手机一区| 日韩av片专区| 三级在线免费观看| 欧美亚洲一二三区| 亚洲一级片免费| 性欧美18一19内谢| 亚洲熟妇无码一区二区三区| 精品www久久久久奶水| 亚洲精品20p| 欧美交换配乱吟粗大25p| 9l视频自拍9l视频自拍| 国产免费一区二区视频| 女性隐私黄www网站视频| 中文字幕第80页| 午夜视频在线观| 日韩精品第1页| 国产免费一区二区三区视频| 天堂av在线网站| 51自拍视频在线观看| 欧美精品99久久| 天天综合成人网| 国产福利影院在线观看| 天天操天天爱天天爽| 国产精品拍拍拍| 在线观看三级网站| 白嫩少妇丰满一区二区| 国产无色aaa| 青青草原网站在线观看| 超碰超碰超碰超碰超碰| 欧美一级视频免费看| 日韩av在线中文| 国产3p露脸普通话对白| 国产最新免费视频| 欧美一级免费播放| 国产又粗又猛大又黄又爽| 免费男同深夜夜行网站| 妞干网在线播放| 国产大尺度在线观看| 五月天av在线播放| 精品www久久久久奶水| 日韩五码在线观看| 日韩精品手机在线观看| 福利片一区二区三区| 日本久久久久久久久久久久| 女人天堂av手机在线| 九九爱精品视频| 久草视频这里只有精品| 欧美激情第四页| 欧美日韩一区二区三区69堂| 中文字幕在线导航| 男人操女人免费| 国产综合免费视频| 亚洲色精品三区二区一区| 欧美xxxxx在线视频| 国产日韩一区二区在线观看| 无码aⅴ精品一区二区三区浪潮| 少妇av一区二区三区无码| 男人天堂网站在线| 欧美图片激情小说| 欧美午夜小视频| 欧洲av无码放荡人妇网站| av天堂永久资源网| 污网站免费在线| 天堂av.com| 男人c女人视频| aa视频在线播放| 免费日韩中文字幕| 国产精品一区二区小说| 91视频福利网| 九九爱精品视频| 国产自偷自偷免费一区| 中文字幕永久有效| 中文字幕第66页| 人妻少妇精品无码专区二区| 大香煮伊手机一区| av电影一区二区三区| 免费看毛片的网址| 美女网站视频黄色| 加勒比海盗1在线观看免费国语版| 成年在线观看视频| 中文字幕第36页| 天天av天天操| 青青草原成人网| 婷婷激情综合五月天| 久久亚洲国产成人精品无码区| 亚洲中文字幕无码中文字| 天天操天天干天天做| 草b视频在线观看| mm131国产精品| 久激情内射婷内射蜜桃| 欧美午夜aaaaaa免费视频| 国产精品一色哟哟| 手机在线免费毛片| 免费裸体美女网站| 日本阿v视频在线观看| 午夜免费高清视频| 丰满爆乳一区二区三区| 伊人再见免费在线观看高清版 | 国产精品久久久毛片| 日本福利视频一区| 国产又粗又硬又长| 五月婷婷六月丁香激情| 精品中文字幕av| 久久人人爽人人爽人人av| 手机av在线网站| 亚洲天堂网一区| 中文字幕乱码人妻综合二区三区| 欧美一区二区三区综合| 特级黄色片视频| 久久黄色片网站| 亚洲国产高清av| 天堂中文视频在线| 久久久久久久久久久久久久国产| 久久久国内精品| 国产树林野战在线播放| 天天久久综合网| 精品国产鲁一鲁一区二区三区| 欧美大尺度做爰床戏| 欧美色图另类小说| 美女av免费在线观看| 黑人糟蹋人妻hd中文字幕| 欧美精品久久久久久久自慰| 国产一区二区视频播放| 国产精品沙发午睡系列|