2

当我尝试使用 CakePHP 2.0 学习和编程网站时,我遇到了一个奇怪的问题。我过去曾使用 1.3 版,但以前从未见过这个问题。我正在运行 Cookbook (p.638) 中的简单身份验证和授权应用程序教程,并且我已经检查并仔细检查以确保它是相同的。

我遇到的问题是,当我调用 /users/login 并使用虚假信息填写表格或将其留空时。Auth 将其登录,如果我这样做,if($this->Auth->user())我将收到 true。

我已经放弃试图理解为什么会发生这种情况。它很奇怪....

/用户/登录

public function login(){
        if($this->request->is('post')){
            if($this->Auth->login($this->request->data)){
                $this->redirect($this->Auth->redirect());
            }else{
                $this->Session->setFlash('Wrong login credentials!', 'default', array('class' => 'notification error closeable')); 
            }
        }
}

// Appcontroller.php ---- 认证配置

class AppController extends Controller {

public $components = array(
    'Session',
    'Auth' => array(
        'authenticate' => array(
            'Form' => array(
                'fields' => array('username' => 'email')
            )
        ),
        'logoutRedirect' => array('controller' => 'pages', 'action' => 'home'),
        'authorize' => array('Controller')
    )
);

 public function isAuthorized($user){
    if(isset($user['role']) && $user['role'] === 'admin'){
        return true;
    }
    return false;
}
4

2 回答 2

3

好的。好像我知道问题出在哪里。尝试做:

if($this->Auth->login())

而不是传递它 CakeRequest 对象。

原因是:

在 2.0$this->Auth->login($this->request->data)中将使用发布的任何数据登录用户,而在 1.3$this->Auth->login($this->data)中将首先尝试识别用户并且仅在成功时登录。也许这就是为什么您无需任何数据即可登录的原因。

于 2013-01-03T03:54:04.840 回答
1
public $components = array(
    'Session',
    'Auth' => array(
        'authenticate' => array(
            'Form' => array(
                'fields' => array('username' => 'email')
            )
        ),
        'loginAction' => array('admin' => false, 'controller' => 'users', 'action' => 'login')
        'logoutRedirect' => array('controller' => 'pages', 'action' => 'home'),
        'authorize' => array('Controller')
    )
);

还可以尝试debug($user);在 AppController 中开始你的 isAuthorized 方法,看看它是否没有从那里得到错误。

于 2013-01-03T04:11:31.280 回答