php - 如何检查令牌是否未过期?
问题描述
我正在尝试生成一个令牌,它是预定义密钥、用户名和时间的组合,有效期为 30 分钟。然后通过电子邮件发送此令牌。
$minutesToAdd = 30;
$timeString = new \DateTime();
$timeString->add(new \DateInterval('PT' . $minutesToAdd . 'M'));
$result = $timeString->format('YmdHi');
$key = 'secret-key';
$combination = $key . '|' . 'zzz' . '|' . $result;
$hash = hash("sha256", $combination);
现在我需要验证令牌是否仍然有效。
我所做的是从数据库中获取用户名,然后在循环中进行组合
$current = (new DateTime())->format('YmdHi');
$newCombination = $key . '|' . $username_from_db . '|' . $current;
$myHashed = hash("sha256", $newCombination);
if (hash_equals($hash, $myHashed)) {
echo "Password matches.";
} else {
echo "Password incorrect.";
}
当我不必添加时间时,这是可行的,但作为一项新要求,我已使令牌有效期为 30 分钟。我不知道该怎么做。
任何人都可以帮忙。
谢谢你。
解决方案
您可能应该添加单独的数据库列,您可以在其中维护哈希创建的日期和时间,并在验证令牌时检查它是否超过 30 分钟。如果它是在 30 分钟之前创建的,则令牌已过期。
推荐阅读
- python - 如何将具有不同有效数字的数字放入数据框中?
- kubernetes - 如何更改 Kubernetes 节点 cidr?
- python - 如何比较 python selenium 中的 Webelement 和 int?
- node.js - 从 spawnSync 到 express-handlebars 的标准输出
- excel - 转到excel中的最后一个非空白行
- c# - 如何运行 BackgroundService 的单个实例?
- javascript - 如何使用 addEventListener 到由 javascript 而不是内联 js 呈现的元素
- python - pathlib 文件夹在 Windows 资源管理器中不可见
- jsp - 如何解决“在本地启动 TomCat v9.0 Server 遇到问题”的问题?
- flutter - 无法点击月份,SfCalender