一、在API目录下创建middleware.php 文件
<?php
return [
\app\middleware\TokenMiddleware::class,
];
二、在app目录下创建middleware目录,并在middleware目录下创建TokenMiddleware.php文件
<?php
namespace app\middleware;
class TokenMiddleware
{
public function handle($request, \Closure $next)
{
// 检查是否是不需要验证Token的控制器和方法
$except = ['Auth/Login'];
$pathinfo = $request->pathinfo();
if (in_array($pathinfo, $except)) {
// 不需要验证Token的控制器和方法,直接通过
return $next($request);
}
// 验证Token
$token = $request->header('token');
if (empty($token)) {
// Token不存在,返回错误响应
return app('json')->fail('Token missing');
}
// 解析Token,获取用户ID
$tokenArray = $this->parseToken($token);
if($tokenArray['code'] != 200){
return app('json')->fail($tokenArray['msg']);
}
// 将用户ID传递给调用的方法
$request->uid = $tokenArray['data'];
// 继续执行下一个中间件或控制器方法
return $next($request);
}
/**
* 通过token获取jwt的uid
* @param $token token
* @return array
*/
private function parseToken($token)
{
return \jwt\Jwt::check($token);
}
}
这里\jwt\Jwt::check($token); 我之前的文章使用jwt有下面链接 juejin.cn/post/711458…
三、创建一个测试控制器测试中间件和uid是否获取正确
<?php
namespace app\api\controller;
use crmeb\basic\BaseController;
class Text extends BaseController{
public function text(){
dd($this->request->uid);
}
}
到这里就完了,我这里能知道打印出uid
小伙伴们!这样就完成了哦! QQ学习交流群:842167453 ,欢迎小伙伴加入一起学习。