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,
但是这两个我都不会...
哪位大神可否指点一二,或提供一下相应解决方案的文档教程,感激!
推荐文章: