定义中间件
首页我们在application/http/middleware目录下面创建一个ApiCheckToken中间件。
<?php
namespace app\http\middleware;
class ApiCheckToken
{
public function handle($request, \Closure $next)
{
// 获取头部信息
$param = $request->header();
$token = array_key_exists('token',$param) ? $param['token'] : $request->param('token');
// 不含token
if (!$token) TApiException('您没有权限访问该接口!');
// 当前用户token是否存在(是否登录)
$user = \Cache::store('redis')->get($token);
// 验证失败(未登录或已过期)
if(!$user) TApiException('Token 令牌不合法!',20003);
// 将token和userid这类常用参数放在request中
$request->userToken = $token;
$request->userId = $user['id'];
$request->userInfo = $user;
return $next($request);
}
}
注册中间件
先在应用配置目录下(config)的middleware.php中先预定义中间件(其实就是增加别名标识)
return [
// 默认中间件命名空间
// 'default_namespace' => 'app\\http\\middleware\\',
'ApiCheckToken' => app\http\middleware\ApiCheckToken::class,
];
然后直接在路由中使用中间件别名注册
Route::rule('hello/:name','hello')
->middleware(['ApiCheckToken', 'check']);
或者使用完整的中间件类名
Route::rule('hello/:name','hello')
->middleware(app\http\middleware\ApiCheckToken::class);