PHP 管理忘记密码
PHP managing forgot password
我正在处理一个忘记密码的页面,并试图找出最好的方法。目前,当用户访问该页面时,它会询问他们的电子邮件。该脚本检查该帐户是否存在,并向他们发送一封包含 link 的电子邮件,以单击以重置他们的密码。
link 包含一个令牌(就是 md5(uniqid())
)和用户选择新密码时要与数据库匹配的电子邮件地址。它将令牌存储在数据库中 table password_resets
以及从现在起 24 小时的到期日期和他们帐户详细信息的外键。
当用户选择新密码时,它将令牌与 password_resets
table 相匹配,将电子邮件发送到该外键的电子邮件地址,并确保到期日期在设置前的未来新密码并从 password_resets
.
中删除记录
这是一种有效的方法吗?为此目的而使用整个 table 似乎是多余的。有更好的方法吗?
通常我会推荐相同的方法,但我注意到你写的是一种有效的方法。可以有一个 actually.I 正在使用 following 库
<?php
# $key is super secret
$key = "someRandomKey";
function gen_token($email,$username) {
$token = array(
"email" => $email,
"username" => $username,
"created" => time()
);
return JWT::encode($token, $key);
}
function validate_token($token,$newPassword) {
# Step below only works on valid token generates on your server
$data = (array) JWT::decode($jwt, $key, array('HS256'));
$currentTime = time();
# Validate difference between $currentTime and $data["created"]
# If time valid update password
}
?>
此方法可以显着减少数据库延迟,还可以让您选择在令牌本身上存储一些验证数据。
我正在处理一个忘记密码的页面,并试图找出最好的方法。目前,当用户访问该页面时,它会询问他们的电子邮件。该脚本检查该帐户是否存在,并向他们发送一封包含 link 的电子邮件,以单击以重置他们的密码。
link 包含一个令牌(就是 md5(uniqid())
)和用户选择新密码时要与数据库匹配的电子邮件地址。它将令牌存储在数据库中 table password_resets
以及从现在起 24 小时的到期日期和他们帐户详细信息的外键。
当用户选择新密码时,它将令牌与 password_resets
table 相匹配,将电子邮件发送到该外键的电子邮件地址,并确保到期日期在设置前的未来新密码并从 password_resets
.
这是一种有效的方法吗?为此目的而使用整个 table 似乎是多余的。有更好的方法吗?
通常我会推荐相同的方法,但我注意到你写的是一种有效的方法。可以有一个 actually.I 正在使用 following 库
<?php
# $key is super secret
$key = "someRandomKey";
function gen_token($email,$username) {
$token = array(
"email" => $email,
"username" => $username,
"created" => time()
);
return JWT::encode($token, $key);
}
function validate_token($token,$newPassword) {
# Step below only works on valid token generates on your server
$data = (array) JWT::decode($jwt, $key, array('HS256'));
$currentTime = time();
# Validate difference between $currentTime and $data["created"]
# If time valid update password
}
?>
此方法可以显着减少数据库延迟,还可以让您选择在令牌本身上存储一些验证数据。