Laravel 每个请求都会与一个查询 users 表 查询语句
看日志的时候 发现每个API请求开始都有一条 查询User表的语句,
select * from `users` where `id` = 1 limit 1
无论是否是有 jwt 中间件,都有查询。 这个语句是哪儿来的? 怎么解决?
如果你有加
api.auth
这个中间件的话就有进行查询,系统会自动检索认证用户。全局搜索一下
Auth::user
Auth::check
Auth::id
看看,尤其是中间件,服务提供者这两个文件夹呀没有使用JWT吗?如果有使用那么只要当前请求中携带token那么JWT就会默认解析一次。好像不管你是不是走JWT中间件,应该是安装JWT扩展包时候,有服务注册到容器中了。每次请求都会加载。这个我找到了是哪句代码的问题,但是没法去掉
根据初步验证,只要传入了 bearer token , laravel 都要走一次 默认的auth guard。
因为我后台接口是使用的非默认guard , 且在中间件中做了一次验证用户是否有效,所以造成了 查询两次不同的guard(如图1)。
如果使用默认guard 就不会有这种情况。
不管使用jwt 还是自带的 token 都会有这种情况。
于是写了个中间, 动态设置 auth guard 就解决了这个情况
auth中间件会获取认证用户,既然要获取用户,就需要查表。