Laravel的Auth验证Token验证使用自定义Redis的例子
背景
项目用户量逐渐增大,接口调用次数越来越多,所以决定使用Redis存token,缓解数据库压力
调研
在config/auth.php文件中发现用户的驱动使用的是EloquentUserProvider服务提供器,然后查找EloquentUserProvider.php然后发现在vendor/laravel/framework/src/Illuminate/Auth文件下存在该文件
model=$model;
$this->hasher=$hasher;
}
/**
*Retrieveauserbytheiruniqueidentifier.
*
*@parammixed$identifier
*@return\Illuminate\Contracts\Auth\Authenticatable|null
*/
publicfunctionretrieveById($identifier)
{
return$this->createModel()->newQuery()->find($identifier);
}
...
/**
*Retrieveauserbythegivencredentials.
*
*@paramarray$credentials
*@return\Illuminate\Contracts\Auth\Authenticatable|null
*/
publicfunctionretrieveByCredentials(array$credentials)
{
if(empty($credentials)){
return;
}
//Firstwewilladdeachcredentialelementtothequeryasawhereclause.
//Thenwecanexecutethequeryand,ifwefoundauser,returnitina
//EloquentUser"model"thatwillbeutilizedbytheGuardinstances.
$query=$this->createModel()->newQuery();
foreach($credentialsas$key=>$value){
if(!Str::contains($key,'password')){
$query->where($key,$value);
}
}
return$query->first();
}
...
}
实现代码
因为我们是需要在当前的Auth验证基础之上添加一层Redis缓存,所以最简单的办法继承EloquentUserProvider类,重写
retrieveByCredentials方法所以我们新建RedisUserProvider.php文件
get($token); return$this->retrieveById($userId); } }
然后在AuthServiceProvider.php文件下修改如下代码
publicfunctionboot(GateContract$gate)
{
$this->registerPolicies($gate);
//将redis注入Auth中
Auth::provider('redis',function($app,$config){
returnnewRedisUserProvider($app['hash'],$config['model']);
});
}
修改config/auth.php用户的auth的驱动为redis。
后续
改完代码以后发现无法正常登录,一直提示用户或密码错误。。。然后看看了下用户认证方法是
auth('web')->once($credentials);然后看是在
Illuminate\Auth\SessionGuard文件中用到了RedisUserProvider文件中retrieveByCredentials方法中对用户进行密码验证,
于是修改RedisUserProvider文件
createModel()->newQuery();
foreach($credentialsas$key=>$value){
if(!Str::contains($key,'password')){
$query->where($key,$value);
}
}
return$query->first();
}
$token=$credentials['token'];
$redis=Cache::getRedis();
$userId=$redis->get($token);
return$this->retrieveById($userId);
}
}
然后登录成功啦!皆大欢喜!
以上这篇Laravel的Auth验证Token验证使用自定义Redis的例子就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。
热门推荐
10 新人红包祝福语简短精辟
11 幼师给毕业祝福语简短
12 生日高考祝福语妹妹简短
13 下飞机祝福语简短英文
14 元宵发客户祝福语简短
15 爸妈金婚文案祝福语简短
16 新郎朋友红包祝福语简短
17 虎年五一祝福语大全简短
18 出阁宴祝福语姐姐简短