2

削除および禁止されたユーザーがログインできないようにするコードが少しあります。気を明確にするために、ステータス-2はユーザーが削除されたことを意味し、-1はユーザーが禁止されたことを意味します。以下はローカルでは問題なく動作するコードですが、ライブではうまくいきません。ステータスが-1または-2のユーザーは、引き続きログインできます。問題がどこにあるのかわかりません。

if ($this->Auth->login()) {
    //first check if the user's status is -1 or -2. 
    $status = $this->Auth->user('status');

    if ($status == '-1') {
        $this->Auth->logout();
        $this->Session->setFlash(__('This account has been banned. Please contact with us.'));
        $this->redirect('/');
    } elseif ($status == '-2') {
        $this->Auth->logout();
        $this->Session->setFlash(__('This account has been deleted, and is not usable anymore.'));
        $this->redirect('/');
    }

    //something else
}
4

2 に答える 2

10

チェックを呼び出すことにより$this->Auth->login()、ユーザーをログインさせます。

これを回避し、ログインする前にユーザー情報を確認するか、ユーザーのスコープにステータスフラグを追加することができます。

$this->Auth->authenticate = array(
    AuthComponent::ALL => array(
        'userModel' => 'User',
        'scope' => array('User.status' => '> 0)
    ),
    'Form',
    'Basic'
);

statusこれにより、ログインプロセスにフィールドチェックが追加されます。

例のようにメッセージをカスタマイズする場合は、ログインを処理する前にユーザー情報の値を確認できます。

$user = $this->User->findByUsername($this->data['User']['username']);
if (!empty($user)) {
    if ($user['User']['status'] == -1) {
        // Set message for banned account
    }
    if ($user['User']['status'] == -2) {
        // Set message for deleted account
    }
    $this->redirect( ... ); // Redirect away
}

if ($this->Auth->login()) {
    // Normal login process
}
于 2012-08-07T01:48:52.430 に答える
2

スコープの答えが最適ですが、条件ではなく、条件に小さなエラーがあります

'scope' => array('User.status' => '> 0)

行は次のようになります

'scope' => array('User.status >' => 0)

これは、条件配列に比較演算子を追加するための典型的なcakephpの方法です

(これについてコメントしただけですが、このサイトを初めて使用する場合は、回答を作成する方が簡単です。)

于 2014-08-11T20:22:49.883 に答える