我正在嘗試製作一個用戶註冊我的網站的小系統,並且他們會收到其中一個包含他們點擊以激活其帳戶的鏈接的電子郵件。使用電子郵件鏈接中的代碼進行用戶帳戶驗證
到目前爲止,我想這樣做以下方式:
- 用戶註冊並提交印刷機。
- 創建一個長的隨機字符串,並將其放入數據庫中,並與此新的「非活動」帳戶相關聯。
- 將電子郵件發送到用戶提供的地址,其中包含鏈接以說明「www.mysite.com/userclass/validationmethod/[email protected]/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;
}
我會在url中包含一個唯一的字段,例如用戶ID,so/userid/string,這會使您在查詢兩個字段時更輕鬆地查詢數據庫,而不是隻搜索一個字段。它也消除了多個用戶可能擁有相同的激活散列/字符串的問題(發生這種情況的可能性不大,但這是一種可能性!) – joao
您不需要在URL中傳遞電子郵件地址。發送您已經保存在數據庫中的唯一驗證碼。在驗證過程中,請檢查代碼是否有效。如果找到有效的代碼,則更新用戶驗證狀態。 –
@JoãoFerreira你認爲我應該保留驗證碼並將其標記爲已使用嗎?我也可以給它一個日期,以便我可以設置到期日嗎? – imperium2335