0

我无法使用 AuthComponent 登录任何用户。user表的名字是users,有一些重要的字段如user_id,user_password,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');
  }
}

这是我的用户控制器

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,哪个字段包含密码???

请帮忙。谢谢。孔塔

4

1 回答 1

1

我注意到的几件事:

public function isAuthorize($user) {

这种方法最后缺少一个“d”。它应该是

public function isAuthorized($user) {

接下来,默认情况下,Cake 希望通过名为“用户名”和“密码”的字段来识别用户。所以,如果你想改变它,你需要这样做:

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 回答