![](/img/trans.png)
[英]PHP, MySQL User registration with email verification and login system (history) with insert date of last seen
[英]PHP login user automatically after email verification
我正在為我的Web應用程序使用PHP Zend框架。 當用戶注冊時,我向他們發送電子郵件以驗證其電子郵件地址,並在他們單擊該鏈接時激活了該帳戶。
我的問題-當用戶單擊激活鏈接時-我也想自動將他們登錄-而不是要求他們再次登錄。 我不確定該怎么做。
這是我在Zend中的登錄操作,需要電子郵件地址和密碼。 因此,我應該發送什么作為激活鏈接的一部分,以便用戶單擊它時,他們將自動登錄。
$db = Zend_Db_Table::getDefaultAdapter();
//create the auth adapter
$authAdapter = new Zend_Auth_Adapter_DbTable($db, 'user','email', 'password');
//set the username and password
$authAdapter->setIdentity($this->_getParam('email'));
$authAdapter->setCredential(md5($this->_getParam('password')));
//authenticate
$result = $authAdapter->authenticate();
if ($result->isValid()) {
$auth = Zend_Auth::getInstance();
$storage = $auth->getStorage();
$row = $authAdapter->getResultRowObject(array('user_id'));
$userModel = new Model_User();
$user = $userModel->loadUserProfile($row->user_id);
$storage->write($user);
}
謝謝你的幫助
您有一個if語句來驗證用戶名和密碼。 對於某人驗證其電子郵件的情況,您正在模仿此過程,並使用戶能夠通過電子郵件和驗證密鑰來驗證其帳戶。
您需要做的就是驗證電子郵件和驗證是否正確,並將此條件置於下面:
.
.
.
$verified = $emailVerification->isValid( $email, $key );
if ( $verified )
{
$auth = Zend_Auth::getInstance();
$storage = $auth->getStorage();
$row = $authAdapter->getResultRowObject(array('user_id'));
$userModel = new Model_User();
$user = $userModel->loadUserProfile($row->user_id);
$storage->write($user);
}
然后,當您將用戶詳細信息保存到Zend_Auth存儲引擎時,該用戶將登錄。
我建議使用此方法后,請從用戶記錄中刪除驗證碼,以確保他們無法再次通過此過程登錄,除非他們忘記了密碼,在這種情況下,您需要分配新的驗證碼。
希望這可以幫助!
我不熟悉zend,所以我沒有正確看一下您的代碼,但這是一個主意:
為了安全起見,您甚至可以創建兩個會話。 第一個將存儲ID,第二個將存儲GUID。 該GUID也將通過驗證鏈接發送給用戶。 因此,當他/她單擊鏈接並返回時,您將比較guid和id是否匹配。 如果匹配,只需像登錄腳本中那樣登錄即可。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.