簡體   English   中英

電子郵件驗證后,PHP登錄用戶自動

[英]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,所以我沒有正確看一下您的代碼,但這是一個主意:

  1. 發送驗證郵件
  2. 發送郵件后創建一個會話
  3. 等等...
  4. 用戶單擊郵件后,如果會話仍處於活動狀態(通常此時間限制為20分鍾左右),只需登錄即可。

為了安全起見,您甚至可以創建兩個會話。 第一個將存儲ID,第二個將存儲GUID。 該GUID也將通過驗證鏈接發送給用戶。 因此,當他/她單擊鏈接並返回時,您將比較guid和id是否匹配。 如果匹配,只需像登錄腳本中那樣登錄即可。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM