thinkPHP配置jwt的示例

  介绍

小编给大家分享一下thinkPHP配置jwt的示例,希望大家阅读完这篇文章之后都有所收获、下面让我们一起去探讨吧!

<强> thinkphp5.1-jwt的安装与使用

安装jwt插件

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

<代码>“重火力点/php-jwt":“^ 5.0“

在项目根目录下执行作曲家更新即可。

创建一个身份验证中间件

<代码> php认为:中间件auth

打开applicationhttpmiddlewareAuth文件

& lt; php ?   namespace 应用\ http \中间件;   use 重火力点\ JWT \ JWT;   use 重火力点\ JWT \ SignatureInvalid \例外;   use 认为\ \ TokenException异常;   use 认为\ \ ValidateException异常;   use 认为   acade \缓存;   use 认为   acade \配置;      class 身份验证   {   ,public  function 处理($请求,,Closure 下一美元)   ,{   ,bearer_token 美元;=,[];   美元,美元bearer =,请求→头(& # 39;授权# 39;);//取头中的令牌   ,if  (bearer 美元;!==,null), {   ,//不空尝试去匹配   ,preg_match(& # 39;/持有者* (S +)/我# 39;,,不记名,美元,美元bearer_token);   ,}   美元,if (空(bearer_token [1])), {   ,//匹配不到结果尝试去url中获取   美元,if (请求→参数(& # 39;标记# 39;),!==,null), {   美元,美元token =,请求→参数(& # 39;标记# 39;);   ,其他}{   ,throw  new  TokenException(& # 39;请登录& # 39;,,401);   ,}   ,其他}{   ,令牌=bearer_token美元[1];   ,}   ,try  {   ,de_token 美元;=,JWT:解码(令牌,美元,配置::获得(& # 39;JWT_KEY& # 39;),,配置::获得(& # 39;JWT_ENCRYPTION& # 39;));   ,}catch  (SignatureInvalidException 美元例外),{   ,//捕获JWT解析错误   ,throw  new  TokenException(& # 39;无效令牌& # 39;,,401);   ,}catch  (Exception 美元例外),{   ,throw  new  TokenException(& # 39;请重新登录& # 39;,,401);   ,}   美元,if  (de_token→voe  & lt;,时间(),,,,美元de_token→exp 祝辞,时间()),{   ,throw  new  TokenException(& # 39;请换取新令牌& # 39;,,402);   ,}else  if (美元de_token→voe  & lt;,时间()),{   ,throw  new  TokenException(& # 39;请重新登录& # 39;,,401);   ,}   ,if (缓存::标签(& # 39;登录# 39;)→得到(& # 39;token_& # 39;,只美元de_token→数据→uid), !=,令牌美元),{   ,throw  new  TokenException(& # 39;用户信息错误,请重新登录& # 39;,,401);   ,}   美元,if  (de_token→数据→is_ban ==, 1), {   ,throw  new  ValidateException(& # 39;该账户已被封禁& # 39;);   ,}   美元,请求→auth =,美元de_token→数据→uid;   ,return 下一美元($请求);   ,}   }

创建一个控制器登录
<代码> php认为:控制器登录/登录——平原
代码如下

& lt; php ?   namespace 登录\ app \控制器;   use 应用\常见\帮助;   use 应用\常见\ \ OperationToken服务;   use 认为\控制器;   use 认为\分贝;   use 认为\请求;   class  Login  extends 控制器   {   ,public  function 登录(Request 美元请求)   ,{   ,info 美元;=,Db:名称(& # 39;用户# 39;)→字段(& # 39;id、uuid尼克,性别,图标,im_accid, im_icon, is_ban& # 39;)→地方(& # 39;del_time& # 39;,, & # 39;=& # 39;,, & # 39; 0 & # 39;)→在((& # 39;移动# 39;,=祝辞,请求→美元参数(& # 39;电话# 39;),,& # 39;密码# 39;,=祝辞,md5(美元请求→参数(& # 39;密码# 39;))))→findOrEmpty ();   ,if  (info 美元;==,null  | |,空($ info)), {   ,return 帮助::errJsonReturn(& # 39;账号或密码错误& # 39;);   ,}   ,token 美元;=,OperationToken: crearToken ($ info (& # 39; id # 39;],,美元信息[& # 39;uuid # 39;],,美元信息[& # 39;is_ban& # 39;]);   json ([, return    ,& # 39;类型# 39;,=祝辞,& # 39;Bearer  & # 39;   ,& # 39;access_token& # 39;=祝辞美元令牌(& # 39;标记# 39;),   ,& # 39;exp_time& # 39;=祝辞美元令牌(& # 39;exp # 39;),   ,& # 39;voe_time& # 39;=祝辞美元令牌(& # 39;小海湾# 39;),   ,& # 39;iat_time& # 39;=在时间()   ,]);   ,}   }

在应用程序下新建常见的文件夹,在常见的下新建服务文件夹,服务文件夹下创建

OperationToken。php

thinkPHP配置jwt的示例