Laravel 每个请求都会与一个查询 users 表 查询语句

看日志的时候 发现每个API请求开始都有一条 查询User表的语句,

select * from `users` where `id` = 1 limit 1    

无论是否是有 jwt 中间件,都有查询。 这个语句是哪儿来的? 怎么解决?

3AC59C22-74E3-48FE-85D9-1A8FDF482795.png

7CA23803-F4F4-40C9-AC7B-B710AF37997D.png

《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 5

如果你有加 api.auth 这个中间件的话就有进行查询,系统会自动检索认证用户。

4年前 评论
Lettbee (楼主) 4年前
ORH (作者) 4年前

全局搜索一下Auth::user Auth::check Auth::id 看看,尤其是中间件,服务提供者这两个文件夹呀

4年前 评论
yema

没有使用JWT吗?如果有使用那么只要当前请求中携带token那么JWT就会默认解析一次。好像不管你是不是走JWT中间件,应该是安装JWT扩展包时候,有服务注册到容器中了。每次请求都会加载。这个我找到了是哪句代码的问题,但是没法去掉

4年前 评论

根据初步验证,只要传入了 bearer token , laravel 都要走一次 默认的auth guard。

因为我后台接口是使用的非默认guard , 且在中间件中做了一次验证用户是否有效,所以造成了 查询两次不同的guard(如图1)。

如果使用默认guard 就不会有这种情况。

不管使用jwt 还是自带的 token 都会有这种情况。

于是写了个中间, 动态设置 auth guard 就解决了这个情况

4年前 评论
jenkincei

auth中间件会获取认证用户,既然要获取用户,就需要查表。

4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!