我正在研究CakePHP,我遵循他们给我的每个方向,我得到了很好的结果,但是当谈到Auth组件(以及他们在网站上教授的非常简单的认证)时,我就可以没办法做到。
方法$ this-> Auth-> login()一直返回false,不让我登录。
我没有使用任何比教程更多的东西,我甚至没有哈希密码(冷静下来,我会,但我需要先获得基本信息!)。
这是我的代码:
模型
App::uses('AppModel', 'Model');
class User extends AppModel {
public $validate = array(
'username' => array(
'notEmpty' => array(
'rule' => array('notEmpty'),
'required' => true
),
),
'password' => array(
'notEmpty' => array(
'rule' => array('notEmpty'),
'required' => true
),
),
);
AppController的
App::uses('Controller', 'Controller');
class AppController extends Controller {
public $components = array(
'Session',
'Auth' => array(
'loginRedirect' => array('controller' => 'pages', 'action' => 'display', 'home'),
'logoutRedirect' => array('controller' => 'Users', 'action' => 'index')
)
);
}
用户控制器
App::uses('AppController', 'Controller');
class UsersController extends AppController {
public function login()
{
if($this->request->is('post'))
{
if(!$this->Auth->login())
{
$this->Session->setFlash('Invalid Username or Password');
}
else
{
$this->redirect($this->Auth->redirectUrl());
}
}
}
public function logout()
{
$this->redirect($this->Auth->logout());
}
查看(Users / login.ctp)
<div class="login-box">
<?php echo $this->Session->flash('auth'); ?>
<?php
echo $this->Form->create();
echo $this->Form->input('username');
echo $this->Form->input('password');
echo $this->Form->end('login');
?>
</div>
答案 0 :(得分:5)
在将密码保存到数据库之前,您必须对密码进行哈希处理。使用AuthComponent :: login()进行身份验证时,首先对登录表单中输入的密码进行哈希处理,然后使用数据库中的条目进行检查。由于您的数据库中的条目未经过哈希处理,因此检查将返回false。
在{:: 3}}中提到的User :: beforeSave()中隐藏密码。