你认为这样安全吗?
大概两个问题。
您还需要确保钥匙不可猜测。无递增数字。你可以使用wp_generate_password
获取一些伪随机字符。使用随机“salt”加上用户的电子邮件,并注册时间或uniqid
您很有可能确保唯一性(见下文)并创建一个不可猜测的键。
$user_email = some_function_to_get_user_email();
$salt = wp_generate_password(20); // 20 character "random" string
$key = sha1($salt . $user_email . uniqid(time(), true));
您还需要确保键的唯一性:不应该有任何冲突。
在user_activation_key
数据库中确保唯一性的列,所以这取决于你的应用程序(例如WordPress和PHP方面的东西)来确保它的唯一性。换言之,在生成密钥之前或之后,请确保该密钥在数据库中不存在。简单、未经测试的示例:
<?php
$key = some_function_that_generates_a_key();
$res = $wpdb->get_col($wpdb->prepare("SELECT EXISTS(SELECT 1 FROM {$wpdb->users} WHERE user_activation_key = %s)", $key));
if ($res) {
// the key exists, try again!
} else {
// good to go.
}
如果你需要一个指南,试着看看WordPress是如何重置电子邮件密码的。过程是一样的:生成一个不可猜测的密钥,确保其唯一性,与相应的用户一起插入数据库,然后向他们发送一封电子邮件,其中包含重置密码的链接。