weshooper/php-email-tokens

此包已被废弃,不再维护。未建议替代包。

生成用于电子邮件的安全令牌(密码重置、注册验证)

6.1.1 2022-08-01 07:55 UTC

This package is auto-updated.

Last update: 2022-12-01 00:12:36 UTC


README

用于密码重置(或注册验证)电子邮件,这些需要是

  1. 完全随机的
  2. 短小,仅包含简单(0-9, A-Z 和 a-z)字符(以避免电子邮件问题)
  3. 在短时间内过期(尽管仍然取决于用户邮箱的安全性)
  4. 一旦使用和/或过期则删除(这部分取决于你!)
  5. 存储在数据库中时进行散列(如密码,如果通过SQL注入读取则无用)

关于forgot_password.php的示例代码

$token = new EmailToken;
$token->getEmailToken(); // include in the link you email the user (don't store anywhere!)
$token->getDatabaseHash(); // store against the user (128 character string) along with `tokenCreated`

提示:最好将用户放入队列中,然后由工作进程或cron生成令牌/电子邮件。

关于reset_password.php的示例代码

$token = new EmailToken;
$user  = loadFromHash($token->hashFromToken($_GET['token'])); // loadFromHash() is pseudo code, your bit!

if ($user && $token->stillValid($user->tokenCreated)) { // DateTime/Carbon parameter (or validate in your SQL query)
    // show password form, delete hash/expiry stored against the user
} else {
    // show generic/non-revealing 'Sorry, that token is no longer valid' message  
}

选项

可以在构造函数中传递一个数组以覆盖默认值

  • 令牌过期时间:默认的15分钟允许电子邮件投递延迟,但降低了电子邮件在可能无人照料的电子邮件客户端中滞留的风险
  • 令牌长度:默认的24个字符对于电子邮件来说足够短,但给出了大约10,000,000,000,000,000,000,000,000,000,000,000,000,000,000种组合(使用62个区分大小写的字母数字字符)- 不可能成功暴力破解(建议使用20个或更多
new EmailToken(['expiryMinutes' => 60]);
new EmailToken(['tokenLength' => 30]);
new EmailToken(['expiryMinutes' => 60, tokenLength' => 30]);

辅助函数

有两个辅助函数

$token->getExpiryMinutes(); // useful to mention in your email message
$token->getTokenLength(); // not sure what you'd use this for!

致谢

评论建议代码来自Martin Stoeckli,对我获得知识和理解非常有价值,感谢Martin!:-)