2

これは単純な CakePHP ログイン関数です (CakePHP クックブックからの例):

public function login() {
    if ($this->request->is('post')) {
        if ($this->Auth->login()) {
            return $this->redirect($this->Auth->redirectUrl());
        } else {
            $message = 'Username or password is incorrect';
            $this->Session->setFlash(__($message), 'default', array(), 'auth');
        }
    }
}

このログイン機能のテスト中に、次のことがわかりました。

if ($this->Auth->login()) {
    // ...
}

認証が以前に行われた場合でも、ユーザーはログインできます。たとえば、User1としてログインし、ログアウト関数を呼び出さずにUser2としてログインしようとすると、次のエラーが発生します。

Notice (8): Undefined index: User [APP/Controller/UsersController.php, line 83]

この場合、ログインフォームをユーザーから隠すことができます。それは正しい方法ですか?

更新: 次のコード スニペットについて教えてください。

public function login() {
    if ($this->request->is('post')) {
        if ($this->Auth->loggedIn()) {
            $this->Auth->logout();
        }
        if ($this->Auth->login()) {
            return $this->redirect($this->Auth->redirectUrl());
        } else {
            $message = 'Invalid login or password';
            $this->Session->setFlash(__($message), 'default', array(), 'auth');
        }
    }
}
4

2 に答える 2

0

これは簡単な修正かもしれません。ログイン コントローラー関数で、セッション変数 IsUserLoggedIn が設定されているかどうかを確認できます。そうでない場合は設定し、認証プロセスを続行します。それ以外の場合は、メッセージ ページにリダイレクトします。

public function login() {
    if ($this->request->is('post')) {

        //check to see if user is logged in.
        if(isset($this->Session->read('IsUserLoggedIn'))) {
        ##perform redirection to "Already Logged In" message
        }

        if ($this->Auth->login()) {
            //write the IsLoggedIn variable to the session.
            $this->Session->write('IsUserLoggedIn', true);

            return $this->redirect($this->Auth->redirectUrl());
        } else {
            $this->Session->setFlash(__('Username or password is incorrect'), 'default',  array(), 'auth');
        }
    }
}

ログアウト時に、次のセッション変数を削除します。

  $this->Session->delete('IsUserLoggedIn');

編集:セッション書き込みを認証ブロック内に移動しました。

于 2013-08-15T13:53:12.163 に答える