0

Auth コンポーネントで User モデルの代わりに Employee モデルを使用しようとしています。私のコードは次のとおりです。

AppController

public $components = array('Session','Auth');
function beforeFilter(){
    Security::setHash('md5');
    $this->Auth->userModel = 'Employee';
    $this->Auth->fields = array('username'=>'code','password'=>'password');
    $this->Auth->loginAction = array('controller'=>'employees','action'=>'login');
    $this->Auth->loginRedirect = array('controller'=>'pages','action'=>'home');
    $this->Auth->loginError = 'Invalid employee code or password, please try again';
    $this->Auth->logoutRedirect = array('controller'=>'employees','action'=>'login');
}
function beforeRender(){
    $this->set('Employee',$this->Auth->user());
}

EmployeeController

function login(){
    $this->layout = 'login';
}
function logout(){
    $this->Redirect($this->Auth->logout());
}
function beforeFilter(){
    parent::beforeFilter();
    $this->Auth->allow('signup');
}
function beforeRender(){
    parent::beforeRender();
}

ログイン.ctp

<?php
echo $this->Form->create('Employee',array('/employees/login'));
echo $this->Form->input('code',array('label'=>'Employee code'));
echo $this->Form->input('password');
echo $this->Form->submit('Sign in',array('class'=>'b-button'));
echo $this->Form->end();
?>

問題は、ログイン ボタンをクリックすると、ページが単に更新されることです。リダイレクトなし、エラー メッセージなし、何もありません。

私がしていることに間違いはありますか?

編集

function login(){
    $this->layout = 'login';
    if($this->request->is('post')){
        if($this->Auth->login($this->request->data)){
            $this->Redirect('/pages/home');
        }else{
            $this->Session->setFlash('incorrect');
        }
    }
}
function logout(){
    $this->redirect($this->Auth->logout());
}

入力した従業員コードまたはパスワードに関係なく、ログインできるようになりました。実際には、ログイン フィールドが空であってもログインを割り当てます。

4

3 に答える 3

1

次のことを試してください。

echo $this->Form->create('Employee', array('controller' => 'employees', 'action' => 'login'));

また、EmployeesController.php の login メソッドでユーザーの信頼性を確認してください。

public function login()
{       
    if ($this->request->is('post'))
    {
        if ($this->Auth->login($this->request->data))
        {               
         /*... do what you want...*/
        }
        else
        {
          this->Session->setFlash('Your username or password was incorrect.');
        }
    }
} 
于 2012-08-07T08:03:41.417 に答える
0

同様の問題がありました。最後に、ここに解決策があります。

a) $components 内でテーブル名とフィールドを定義します。フィルタの前に使用しないでください

public $components = array('Session', 'Acl', 'Auth' => array('authenticate' => array('Form' => array('userModel' => 'Employee','fields' => array('username' => 'code'), 'password' => 'password'))), 'Cookie');

b) 絶対に使用しないでください

$this->Auth->login($this->request->data)

これにより、投稿したガベージのセッションが作成されます。代わりに使用

$this->Auth->login()

c) また、cakephp のハッシュ方法は md5 ではありません。その行を削除したい場合があります。

于 2012-08-15T12:10:19.613 に答える
0
echo $this->Form->create('Employee',array('/employees/login'));

試す:

echo $this->Form->create('Employee',array('action'=>'login'));
于 2012-08-07T07:34:11.590 に答える