0

AuthComponentを使用してユーザーにログインできません。ユーザーテーブルの名前はusersであり、user_id、user_passwordなどのいくつかの重要なフィールドがあり、パスワードフィールドにハッシュはありません。

これは私のAppControllerです

class AppController extends Controller {
  public $components = array(
    'Session',
    'Auth' => array(
      'loginRedirect' => array('controller' => 'users', 'action' => 'index'),
      'logoutRedirect' => array('controller' => 'users', 'action' => 'home'),
      'authError' => 'You cannot view this page',
      'authorize' => array('controller')
    )
  );

  public function isAuthorize($user) {
    return true;
  }

  public function beforeFilter() {
    $this->Auth->allow('home');
  }
}

これは私のUsersControllerです

class UsersController extends AppController {
  public function login() {
    if ($this->request->is('post')) {
      if ($this->Auth->login()) {
        $this->redirect($this->Auth->redirect());
      } else {
        $this->Session->setFlash('Cannot login in');  
      }
    }
  }
}

これは私のユーザーモデルです。

class User extends AppModel {
  public $name = 'User';
  public $primaryKey = 'user_id';
  public $belongsTo = 'Group'; 
}

これは私の見解です

<h2>Login</h2>

<?php

echo $this->Form->create();
echo $this->Form->input('user_id', array('label' => 'User ID', 'type' => 'text'));
echo $this->Form->input('user_password', array('label' => 'Password', 'type' => 'password'));
echo $this->Form->end('Login');

?>

修正したuser_idとパスワードを入力してログインボタンを押すと、UsersControllerからログインできないというメッセージが表示されました。ここで何が悪かったのですか?

また、AuthComponent:login()の概念、データベースに対してuser_idとパスワードをチェックする方法、user_idを含むフィールド、パスワードを含むフィールドをどのように知るのか、私は本当に理解していません。

助けてください。ありがとう。Kongthap

4

1 に答える 1

1

私が気づいたいくつかのこと:

public function isAuthorize($user) {

このメソッドには、最後に「d」がありません。そのはず

public function isAuthorized($user) {

次に、デフォルトでは、Cakeは「username」および「password」という名前のフィールドでユーザーを識別することを想定しています。したがって、これを変更する場合は、次のようにする必要があります。

class AppController extends Controller {
  public $components = array(
    'Session',
    'Auth' => array(
      'loginRedirect' => array('controller' => 'users', 'action' => 'index'),
      'logoutRedirect' => array('controller' => 'users', 'action' => 'home'),
      'authError' => 'You cannot view this page',
      'authorize' => array('controller'),
      'authenticate' => array(
          'Form' => array( // THIS IS WHERE YOU CHANGE THE DEFAULT FIELDS
             'fields' => array('username' => 'user_id','password' => 'user_password')
          )
       )
    )
  );

そのコードはテストされていませんが、正しい方向に進むはずです。しかし、デイブが言ったように、それがすべてどのように機能するかを理解するために完全なドコを読むことは本当に価値があります:http: //book.cakephp.org/2.0/en/core-libraries/components/authentication.html

最後に、「user_id」が列名の適切な選択であるかどうかはわかりません。'user_id'の列名は、'users'テーブルの'id'列を指す、あるテーブルの外部キーであることが期待されます。それが機能しない場合は、おそらく別の名前を使用する必要があります。

于 2012-08-12T00:00:51.270 に答える