weshooper / php-email-tokens
此包已被废弃,不再维护。未建议替代包。
生成用于电子邮件的安全令牌(密码重置、注册验证)
6.1.1
2022-08-01 07:55 UTC
Requires
- php: ^8.0
- ext-mbstring: ^8.0
- nesbot/carbon: ^2.0
- tuupola/base62: ^2.0
Requires (Dev)
- ergebnis/composer-normalize: ^2.6
- fusionspim/php-cs-fixer-config: ^10.0
- phpunit/phpunit: ^9.0.0
README
用于密码重置(或注册验证)电子邮件,这些需要是
- 完全随机的
- 短小,仅包含简单(0-9, A-Z 和 a-z)字符(以避免电子邮件问题)
- 在短时间内过期(尽管仍然取决于用户邮箱的安全性)
- 一旦使用和/或过期则删除(这部分取决于你!)
- 存储在数据库中时进行散列(如密码,如果通过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!:-)