php – 使用电子邮件链接中的代码验证用户帐户

我正在尝试创建一个用户注册到我的网站的小系统,他们会收到其中一个电子邮件,其中包含一个链接,用户可以点击这些电子邮件来激活他们的帐户.

到目前为止,我正在考虑采用以下方式:

>用户注册并按提交.
>创建一个长随机字符串,并将其放入数据库中,以防止这个新的“非活动”帐户.
>电子邮件将发送到用户提供的地址,其中包含指向“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\u0026amp;confirm=u34h23ui4h234取决于您处理url参数的方式.

点赞