Lumen 中,如何为 JWT-AUTH 用到的 EloquentUserProvider 加上 Redis 缓存?
业务背景:
开发一个 api 登录获取 JWT 的接口,该接口预期秒每并发登录获取 token 会达到 100 + 请求且每个用户很可能会不断的获取 TOKEN (请不要让我对其做限制,这是业务允许的行为)
准备使用的包
jwt-auth lumen dingoapi https://github.com/liyu001989/lumen-api-de...**
过程:
因为对 laravel 和 lumen 都不是很熟悉,所以不太清楚 Auth 的整个验证过程,安装完 lumen api demo 后,我开始跟代码,\Auth::attempt ([用户名,密码]),发现它最后执行的文件是 vendor/tymon/jwt-auth/src/JWTGuard.php 中的 attempt,它是通过调用 hasValidCredenitals 进行验证的,继续跟
protected function hasValidCredentials($user, $credentials)
{ dd($user); ====> null (发现$user是NULL值)
return $user !== null && $this->provider->validateCredentials($user, $credentials);
}
我直接点击 validateCredentials 得到的是一个接口类,通过搜索找到 validateCredentials 实际执行的位置在
vendor/illuminate/auth/EloquentUserProvider.php 中,即:
public function validateCredentials(Authenticatable as UserContract $user, array $credentials)
{
dd($user); ==> App\Model\User对象,且$user是$credentials对应的用户
$plain = $credentials['password'];
return $this->hasher->check($plain, $user->getAuthPassword());
}
当我点 UserContract 发现它也是一个接口,再搜索
问题
在这个过程中,我十分不理解的是:UserContract 是在哪里实例化的,实例化的具体文件是哪个文件?
需求
因为业务需要,我希望为 UserProvider 加一个 redis 缓存 ,以解决用户频繁获取 token 导致的频繁查数据库行为
因为前面跟的这个问题,我发现不仅要重写 UserProvider, 还要重写 UserContract,
但是这两个我都不会...
哪位大神可否指点一二,或提供一下相应解决方案的文档教程,感激!
推荐文章: