首页 > 解决方案 > 如何检查令牌是否未过期?

问题描述

我正在尝试生成一个令牌,它是预定义密钥、用户名和时间的组合,有效期为 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 分钟。我不知道该怎么做。

任何人都可以帮忙。

谢谢你。

标签: phphash

解决方案


您可能应该添加单独的数据库列,您可以在其中维护哈希创建的日期和时间,并在验证令牌时检查它是否超过 30 分钟。如果它是在 30 分钟之前创建的,则令牌已过期。


推荐阅读