2011-12-07 20 views
1

私はWebアプリケーション用にPHP Zendフレームワークを使用しています。ユーザーが登録すると、電子メールで自分の電子メールアドレスを確認し、そのリンクをクリックするとアカウントが有効になります。電子メールの確認後に自動的にPHPログインユーザ

私の問題 - ユーザーがアクティブ化リンクをクリックしたときに、再度ログインするのではなく、自動的にログインしたいと思う。私はそれをどうやって行うのか分からない。

これは電子メールアドレスとパスワードが必要なZendのログインアクションです。それでは、ユーザーがそれをクリックすると、それらは自動的に記録されるように、私はアクティベーションリンクの一部として送信する必要があります。私はZendのに慣れていないよあなたの助け

+0

セッションを使用して、ユーザーが記録されているかどうか、自分の役割などをテストしているのか、それともZend_Authだけですか? –

+0

Zend_Authを使用しています – Gublooo

答えて

8

ユーザ名とパスワードを認証する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にストレージエンジンにそのユーザの詳細を保存したとして、ユーザは、その後に記録されます。

この方法を使用した後は、ユーザーレコードから確認キーを削除して、新しい確認キーを割り当てた場合にパスワードを忘れない限り、再度このプロセスでログインできないようにしてください。

希望すると便利です。

1

ため

$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); 
    } 

おかげで私はやりましたあなたのコードは正常に見えますが、ここでの考え方ではありません。

  1. は、あなたがそれのためにメール
  2. 待ちを送信した後、セッションを作成し、検証メール
  3. を送るには...
  4. ユーザーがメールをクリックすると、セッションがまだアクティブであれば(通常はこの制限時間は20分です)、ログインするだけです。

安全のため、2つのセッションを作成することもできます。最初のものはidを格納し、2番目のものはguidを格納します。 guidは、検証リンク内のユーザーにも送信されます。したがって、リンクをクリックして戻ると、GUIDとIDが一致するかどうかを比較します。ログインスクリプトと同じようにログインするだけでログインできます。