mirror of
https://gitee.com/koogua/course-tencent-cloud.git
synced 2025-07-16 21:26:13 +08:00
1.redis增加expire()方法
2.精简代码
This commit is contained in:
parent
7c5ea7fe34
commit
3a703dd0e1
@ -4,7 +4,7 @@
|
||||
|
||||
<div class="layui-tab layui-tab-brief">
|
||||
<ul class="layui-tab-title kg-tab-title">
|
||||
<li class="layui-this">注册设置</li>
|
||||
<li class="layui-this">基本设置</li>
|
||||
<li>QQ登录</li>
|
||||
<li>微信登录</li>
|
||||
<li>微博登录</li>
|
||||
|
@ -16,13 +16,13 @@
|
||||
<div class="layui-form-item" style="margin-bottom:20px;">
|
||||
<label class="layui-form-label">用户协议</label>
|
||||
<div class="layui-input-block">
|
||||
<a class="layui-btn layui-btn-normal" href="{{ url({'for':'admin.page.edit','id':'terms'}) }}">前往设置</a>
|
||||
<a class="layui-btn layui-btn-normal" href="{{ url({'for':'admin.page.edit','id':'terms'}) }}">设置</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item" style="margin-bottom:20px;">
|
||||
<label class="layui-form-label">隐私政策</label>
|
||||
<div class="layui-input-block">
|
||||
<a class="layui-btn layui-btn-normal" href="{{ url({'for':'admin.page.edit','id':'privacy'}) }}">前往设置</a>
|
||||
<a class="layui-btn layui-btn-normal" href="{{ url({'for':'admin.page.edit','id':'privacy'}) }}">设置</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
|
@ -161,7 +161,7 @@ class Redis extends \Phalcon\Cache\Backend\Redis
|
||||
|
||||
$redis->setOption(\Redis::OPT_SCAN, \Redis::SCAN_RETRY);
|
||||
|
||||
$it = null;
|
||||
$it = 0;
|
||||
|
||||
while ($keys = $redis->scan($it, $pattern)) {
|
||||
if (count($result) > $limit) break;
|
||||
@ -191,6 +191,35 @@ class Redis extends \Phalcon\Cache\Backend\Redis
|
||||
return (bool)$redis->exists($lastKey);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $keyName
|
||||
* @return bool
|
||||
*/
|
||||
public function expire($keyName = null, $lifetime = null): bool
|
||||
{
|
||||
$redis = $this->getRedis();
|
||||
|
||||
/**
|
||||
* @var FrontendInterface $frontend
|
||||
*/
|
||||
$frontend = $this->_frontend;
|
||||
|
||||
if ($keyName === null) {
|
||||
$lastKey = $this->_lastKey;
|
||||
} else {
|
||||
$lastKey = $this->getKeyName($keyName);
|
||||
}
|
||||
|
||||
if ($lifetime === null) {
|
||||
$tmp = $this->_lastLifetime;
|
||||
$ttl = $tmp ?: $frontend->getLifetime();
|
||||
} else {
|
||||
$ttl = $lifetime;
|
||||
}
|
||||
|
||||
return $redis->expire($lastKey, $ttl);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $keyName
|
||||
* @return int|bool
|
||||
|
@ -26,19 +26,4 @@ class UserSession extends Repository
|
||||
->execute();
|
||||
}
|
||||
|
||||
/**
|
||||
* @param int $userId
|
||||
* @param int $minutes
|
||||
* @return ResultsetInterface|Resultset|UserSessionModel[]
|
||||
*/
|
||||
public function findUserRecentSessions($userId, $minutes = 10)
|
||||
{
|
||||
$createTime = time() - $minutes * 60;
|
||||
|
||||
return UserSessionModel::query()
|
||||
->where('user_id = :user_id:', ['user_id' => $userId])
|
||||
->andWhere('create_time > :create_time:', ['create_time' => $createTime])
|
||||
->execute();
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -25,19 +25,4 @@ class UserToken extends Repository
|
||||
->execute();
|
||||
}
|
||||
|
||||
/**
|
||||
* @param int $userId
|
||||
* @param int $minutes
|
||||
* @return ResultsetInterface|Resultset|UserTokenModel[]
|
||||
*/
|
||||
public function findUserRecentTokens($userId, $minutes = 10)
|
||||
{
|
||||
$createTime = time() - $minutes * 60;
|
||||
|
||||
return UserTokenModel::query()
|
||||
->where('user_id = :user_id:', ['user_id' => $userId])
|
||||
->andWhere('create_time > :create_time:', ['create_time' => $createTime])
|
||||
->execute();
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -54,11 +54,6 @@ class Home extends AuthService
|
||||
return $authInfo ?: null;
|
||||
}
|
||||
|
||||
public function getAuthKey()
|
||||
{
|
||||
return 'home_auth_info';
|
||||
}
|
||||
|
||||
public function logoutClients($userId)
|
||||
{
|
||||
$cache = $this->getCache();
|
||||
@ -101,4 +96,9 @@ class Home extends AuthService
|
||||
return "_PHCR_SESSION_:{$sessionId}";
|
||||
}
|
||||
|
||||
protected function getAuthKey()
|
||||
{
|
||||
return 'home_auth_info';
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -12,12 +12,9 @@ use App\Exceptions\Forbidden as ForbiddenException;
|
||||
use App\Library\Utils\Password as PasswordUtil;
|
||||
use App\Library\Validators\Common as CommonValidator;
|
||||
use App\Models\Account as AccountModel;
|
||||
use App\Models\Client as ClientModel;
|
||||
use App\Models\User as UserModel;
|
||||
use App\Repos\Account as AccountRepo;
|
||||
use App\Repos\User as UserRepo;
|
||||
use App\Repos\UserSession as UserSessionRepo;
|
||||
use App\Repos\UserToken as UserTokenRepo;
|
||||
use App\Traits\Client as ClientTrait;
|
||||
|
||||
class Account extends Validator
|
||||
@ -193,34 +190,6 @@ class Account extends Validator
|
||||
if ($case1 && $case2) {
|
||||
throw new ForbiddenException('account.locked');
|
||||
}
|
||||
|
||||
$this->checkFloodLogin($user->id);
|
||||
}
|
||||
|
||||
public function checkFloodLogin($userId)
|
||||
{
|
||||
$clientIp = $this->getClientIp();
|
||||
$clientType = $this->getClientType();
|
||||
|
||||
if ($clientType == ClientModel::TYPE_PC) {
|
||||
$repo = new UserSessionRepo();
|
||||
$records = $repo->findUserRecentSessions($userId, 10);
|
||||
} else {
|
||||
$repo = new UserTokenRepo();
|
||||
$records = $repo->findUserRecentTokens($userId, 10);
|
||||
}
|
||||
|
||||
if ($records->count() == 0) return;
|
||||
|
||||
$clientIps = array_column($records->toArray(), 'client_ip');
|
||||
|
||||
$countValues = array_count_values($clientIps);
|
||||
|
||||
foreach ($countValues as $ip => $count) {
|
||||
if ($clientIp == $ip && $count > 4) {
|
||||
throw new ForbiddenException('account.flood_login');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -47,7 +47,6 @@ $error['captcha.invalid_code'] = '无效的验证码';
|
||||
*/
|
||||
$error['account.not_found'] = '账号不存在';
|
||||
$error['account.locked'] = '账号被锁定,无法登录';
|
||||
$error['account.flood_login'] = '帐号泛滥登录';
|
||||
$error['account.login_pwd_incorrect'] = '登录密码不正确';
|
||||
$error['account.invalid_login_name'] = '无效的登录名';
|
||||
$error['account.invalid_email'] = '无效的电子邮箱';
|
||||
|
@ -11,7 +11,7 @@ layui.use(['jquery', 'layer', 'helper'], function () {
|
||||
var url = '/verify/captcha?type=all&account=' + $account.val();
|
||||
layer.open({
|
||||
type: 2,
|
||||
title: '获取验证码',
|
||||
title: '验证码',
|
||||
area: ['500px', '250px'],
|
||||
content: [url, 'no'],
|
||||
});
|
||||
|
Loading…
x
Reference in New Issue
Block a user