介绍
小编给大家分享一下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的示例