1

Cakephp プロジェクトで認証を実装しています。しかし、デフォルトの「users」テーブルは使いたくありません。「system_admins」テーブルを使用したい。ここでチュートリアルを読みました: http://book.cakephp.org/2.0/en/core-libraries/components/authentication.html#configuring-authentication-handlers

これが私のコントローラーです(SysemAdminController.php)

<?php
App::uses('AppController', 'Controller');

class SystemAdminsController extends AppController {
    // index, add, edit, delete actions
    public function beforeFilter() {
        parent::beforeFilter();
        $this->Auth->authenticate = array(
            AuthComponent::ALL => array('userModel' => 'SystemAdmin'),
            'Form',
            'Basic'
       );
    }

    public function login() {
        if($this->request->is('post')) {
            if($this->Auth->login()) {
                $this->redirect($this->Auth->redirect());
            }
            else {
                $this->Session->setFlash(__('Invalid username or password, try again'));
            }
        }
    }
}

そして、ここにモデル(SystemAdmin.php)があります

<?php
App::uses('AppModel', 'Model');
App::uses('AuthComponent', 'Controller/Component');
// validates options
public function beforeSave($options = array()) {
    if(isset($this->data[$this->alias]['password'])) {
        $this->data[$this->alias]['password'] = AuthComponent::password($this->data[$this->alias]['password']);
    }
}

これがビューです(login.ctp)

<div class="users form">
<?php echo $this->Session->flash('auth'); ?>
<?php echo $this->Form->create('SystemAdmin'); ?>
<fieldset>
<legend><?php echo __('Please enter your username and password'); ?></legend>
<?php echo $this->Form->input('username');
      echo $this->Form->input('password');
?>
</fieldset>
<?php echo $this->Form->end(__('Login')); ?>
</div>

しかし、 http ://mydomain.com/system_admins/loginにアクセスしようとすると、常にhttp://mydomain.com/users/login にリダイレクトされ、「UsersController could not be found.」というエラー メッセージが表示されます。

4

1 に答える 1

1

デフォルトのログイン ページが定義されていません。デフォルトでは、ユーザー モデルはUserであるため、デフォルトのログイン ページは/users/loginです。

loginActionを定義する必要があります。 $this->Auth->loginAction = '/system_admins/login';

そしておそらく、login認証されていないユーザーにページを許可します: $this->Auth->allow('login');

于 2013-03-08T10:03:31.130 に答える