我正在尝试制作一个小系统,用户在其中注册我的网站后,他们会收到其中一封电子邮件,其中包含一个链接,他们可以在其中单击以激活他们的帐户。
到目前为止,我正在考虑采用以下方式:
- 用户注册并按提交。
- 根据这个新的“非事件”帐户创建一个长的随机字符串并将其放入数据库。
- 系统会向用户提供的地址发送一封电子邮件,其中包含一个链接“www.mysite.com/userclass/validationmethod/user@email.com/3423frqfafkop2341o43”。最后一位是验证码。
- 用户点击链接。
- 电子邮件和代码与刚创建的帐户相匹配。该帐户被标记为已验证/有效。
- 存储在数据库中的验证码被删除或标记为已使用??
您对此有何看法?这是最好的方法吗?作为一个额外的小问题,我需要对该电子邮件地址进行 urlencode 吗?
我使用了以下似乎效果很好的方法。只需要添加数据库函数,它就会被排序:
public function verifyAccount($vCode, $email) {
$email = urldecode($email);
if($userId = $this->model->userIdByEmail($email))
{
$actualCode = $this->model->getUsersVerificationCodes('code', 'userId', $userId);
if($actualCode != $vCode)
{
$output = 'Invalid code or email.';
} else {
$output = 'Success!';
}
} else {
$output = 'Invalid code or email.';
}
echo $output;
}
最佳答案
我觉得不错,我也会这样做。但我不会使用链接中的电子邮件。改用这样的东西:
mysite.com/confirm_email/749c71f6a29220a3ec168df
编辑:我认为您不需要对电子邮件进行 urlencode,但是当您这样做时,处理地址可能会更容易。
我认为另一个可能的选择是:
mysite.com?email=urlencoded_email&confirm=u34h23ui4h234
取决于您处理 url 参数的方式。
关于php - 使用电子邮件链接中的代码验证用户帐户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21255118/