我正在使用Laravel构建登录限制系统,我用它来保存缓存数据库上的每个失败登录。 (我使用Redis)。
代码:
class FailedLogins
{
const NUM_FAILURES_TO_LOCK = 30,
TIME_RANGE = 10; // In minutes
public function add($email, $ip = null)
{
if (is_null($ip))
$ip = request()->ip();
$index = md5($email . $ip);
Cache::tags('failed.logins')->put($index, 1, self::TIME_RANGE);
}
public function hasTooMany()
{
$numFailedLogins = count(Cache::tags('failed.logins')->get());
return ($numFailedLogins >= self::NUM_FAILURES_TO_LOCK);
}
}
问题出在hasTooMany
方法上,我必须在get
方法上提供一个关键参数。我在这一行上尝试做的是:Cache::tags('failed.logins')->get()
是获取带有failed.logins
标记的所有条目,因此我可以计算有多少条目。
嗯,这不起作用,因为我做不到。那你建议我用什么来解决呢?如果它只是Redis的解决方案,也可以。
答案 0 :(得分:0)
你可以使用redis哈希:
但是您无法在哈希键上设置单独的过期日期,因此您必须手动删除它们,或者使用带有小时的主键,例如: failed.logins:08并且全部到期。