0

アクティブ化されたユーザーがログインできるシステムでログインを作成しましたが、アカウントがアクティブ化されていないユーザーはログインできません。問題は、ユーザーが非アクティブ化されたアカウントでログインしようとすると、フラッシュ メッセージが出力されないことです。であるため、ログイン ページでページが更新され続ける理由がユーザーにわかりません。

ここに私のログイン機能があります

if ($this->request->is('post')){
    if ($this->request->data['User']['password'] == 'qazwsx'){
    if ($this->Auth->login()){
    $username = $this->request->data['User']['username'];
     if (0 === $this->User->find('count',array('conditions'=>array('activated'=>1,'username'=> $username)))) {
         $this->Session->setFlash('Sorry, your account is not validated yet.');
         $this->redirect($this->referer());
    }

        $this->Auth->user('id');
        $this->redirect($this->Auth->redirect('eboxs/home')); 
        }   
    } 
    else {

        $this->Session->setFlash('Username or password is incorrect');
    }
    }else{
    $this->Session->setFlash('Welcome, please login');
    }


}

これまでのところ、呼び出しを行う必要がなかったフラッシュ メッセージにビューの原因を含めていません。

4

1 に答える 1

0

あなたがそこでやっている奇妙な認証方法。

コメントで既に説明したように、ユーザーがリダイレクトされる場所 ($this->redirect) には、

<?php echo $this->Session->flash(); ?>

そのビューで。

また、その方法では、ユーザーはとにかくログインしています。フラッシュメッセージを表示したりリダイレクトしたりする前に、そのユーザーを手動で再度ログアウトする必要があります。

次のように書くこともできます。

<?php
  ...
  $this->Auth->scope = array('User.activated' => 1);

  if ($this->Auth->login()) {
    // logged-in logic
  } else {
    // not logged-in logic
  }
?>

これにより、数行のコードを節約できます。

于 2012-05-24T18:03:41.140 に答える