讨论数量:
-
用户登录成功后需要记录登录日志。用户登录成功后会触发一个事件,然后走的是消息队列,异步去写登录的日志,这里就需要用到user_id。目前我是通过用户提交的信息,再去查一次数据库,拿到user_id。但是呢,这种做法不好。比如在某一刻,同时有10000个用户登录,在记登录日志的时候,前前后后需要查10000次,对数据库的压力还蛮大的。我其实就是想知道,有没有什么方便的途径能拿到登录成功的用户id(因为之前有看到过$this-user(),Auth::guard('api')->user()等方式获取用户信息的)。
- 我预想了一种方案,使用缓存。在vendor/laravel/passport/src/Bridge/UserRepository.php中的getUserEntityByUserCredentials()方法,第41行:
if (method_exists($model, 'findForPassport')) { $user = (new $model)->findForPassport($username); } else { $user = (new $model)->where('email', $username)->first(); }
在findForPassport方法中,把查到的user信息如user_id写到缓存里。有异步处理的时候,直接去查缓存,拿到user_id。这种方式莫名觉得笨笨的。
推荐文章: