关于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方法里面获取不到中间件中的参数, 你代码截图我看看。

0
0

全流程开发 TP6.0实战高并发电商服务系统

一课就能掌握TP6.0基础及运用,打造完整高并发的电商后端项目

1463 学习 · 1332 问题

查看课程