2012-03-10 16 views
5

私は新しいプロジェクトのユーザー管理コンポーネントを開発中です。 計画は次のとおりです。CakePHP 2.0アカウントアクティベーション後の自動ログイン

  1. ユーザー・アカウント・データの最小量を持つページの登録(ユーザー名、パス、電子メール)
  2. ユーザーが
  3. アカウントをアクティブにするためにアクティベーションリンクを電子メールで取得するユーザーがクリックリンクと自動的に起動した後の後
  4. ユーザーでシステムログを自分のアカウントをアクティブにし、アカウント情報(最後のログイン、ハイテク「ユーザ名」など)
とダッシュボードの種類に彼をリダイレクトします

しかし、自動ログインにはいくつか問題があります。あなたは認証コンポーネントのユーザー()関数でログインしているユーザーに関する情報を取得したいまで、これは、これまでの作品

<?php 
... 
// set userstatus to "active" and delete meta information "activation_key" 
// then automatically login 
$this->User->id = $id; 
$this->User->saveField('modified', date('Y-m-d H:i:s')); 
$this->User->saveField('status', 1); 

// $this->User->deleteActivationKey .... 

$this->Auth->login($this->User->read()); 
$this->Session->setFlash(__('Successfully activated account. You are now logged in.')); 

$this->User->saveField('last_login', date('Y-m-d H:i:s')); 

$this->redirect(array('controller' => 'pages')); 
... 

:これは私が使用したコードの一部です。

私たちは、幅広い利用者情報アプリケーション持って、AppController-> beforeRenderでこれを使用している:

$this->set('auth', $this->Auth->user()); 

が、その自動ログイン・アクションの後、私は未定義のインデックス通知を取得しています。 (例えば、ビュー内の$ auth ['id']にアクセスすることによって)。 print_r()は現在のユーザーのユーザー名とハッシュされたパスワードのみを表示します。 手動でログインすると、すべて正常に動作します。アカウントのアクティベーションの後に自動ログインを使用する必要があります。

セッションに問題があると思われますか?何が間違っているのですか?

答えて

11

多くのバリエーションをテストした後、解決策が見つかりました。今で

作品:

$user = $this->User->findById($id); 
$user = $user['User']; 
$this->Auth->login($user); 

、私はすでにこの方法を試したと思ったし、それが機能しなかった理由を知ってはいけません。

+2

$ this-> Auth-> login($ user ['User']); –

1

これを試しましたか? (CakePHP 2.x)

public function signup() { 
    if (!empty($this->request->data)) { 
    // Registration stuff 

    // Auto login 
    if ($this->Auth->login()) { 
     $this->redirect('/'); 
    } 
    } 
} 

それは簡単!

関連する問題