关于api权限重构
来源:7-19 个人中心数据修改以及预留的作业

黎明前的悲伤
2020-03-17
老师您好,我按照您的要求把api的权限判断写在了中间件当中,是这么写的,您看看对不对,或者还有哪些地方是需要修改和改进的。
Auth.php 中间件文件
public function handle($request,\Closure $next){
//前置中间件
$token = $request->header('token'); //获取接口所携带的token
$user_id = cache("token_".$token); //查询redis中的token
if(empty($token) || empty($user_id)) { //判断接口token是否存在以及redis中对应token是否存在
throw new TokenException(); //抛出token异常处理
}
$user = UserModel::getUserById($user_id); //通过用户id查询用户信息
if(empty($user)){
throw new UserException(); //用户信息不存在
}
if($user["status"] != 1){
throw new FrozenException(); //用户已被冻结
}
$request->user_id = $user_id; //记录token对应会员id值
return $next($request);
//后置中间件
}
控制器
//定义中间件
protected $middleware = [
'auth' => ['only' => ['getInfo','setInfo'] ],
];
//获取资料
public function getInfo(){
$info = (new UserBase())->getInfo($this->request->user_id);
return show(200,"个人资料",$info);
}
可以实现相关的要求和判断,但是这个地方遇到一个问题;我控制器里面想设置一个用来记录user_id的公共参数,然后再初始化里面获取中间件里面传递过来的user_id,这样就不用每个方法都去调用了。但是初始化initialize()中获取不到中间件中的参数,但是在其他方法中就可以,百度搜索了也没找到相应的解决方案。老师麻烦看看,还有我上面这样写的话是不是还有需要修改的地方,往指点,非常感谢。
写回答
1回答
-
singwa
2020-03-18
亲爱的同学您好。您这样的写法没问题
第二个问题,关宏宇您的initialize方法里面获取不到中间件中的参数, 你代码截图我看看。
00
相似问题