无法通过Auth登录使用CakePHP 2.0

San*_*ndy 7 forms authentication cakephp login

我正在尝试使用CakePHP 2.0获得一个简单的登录表单...只是Auth,现在没有ACL.

我能够看到表单并输入电子邮件和密码,因为它们在数据库中,但我只是返回到表单并显示flash错误消息.这是我的代码:

AppController的:

 class AppController extends Controller
 {
     function beforeFilter()
     {
         $this->Auth->userModel = 'Users';
         $this->Auth->fields = array('username' => 'email', 'password' => 'password'); //have to put both, even if we're just changing one
         $this->Auth->loginAction = array('controller' => 'users', 'action' => 'login');
         $this->Auth->loginRedirect = array('controller' => 'hotels', 'action' => 'dashboard');
         $this->Auth->logoutRedirect = array('controller' => 'users', 'action' => 'login');
     }
 }
Run Code Online (Sandbox Code Playgroud)

login.ctp:

<?php
         echo $this->Form->create('User', array('action' => 'login'));
         echo $this->Form->input('email');
         echo $this->Form->input('password');
         echo $this->Form->end('Login');
     ?>
Run Code Online (Sandbox Code Playgroud)

UsersController:

 class UsersController extends AppController
 {
     var $name = 'Users';
     var $helpers = array('Html','Form');
     var $components = array('Auth','Session');

     function beforeFilter()
     {
         $this->Auth->allow("logout");
         parent::beforeFilter();
     }

     function index() { } //Redirects to login()

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

     function logout()
     {
         $this->redirect($this->Auth->logout());
     }
 }
 ?>
Run Code Online (Sandbox Code Playgroud)

我很感激任何帮助.谢谢!

men*_*sch 9

"无效的用户名或密码,请重试"显示错误你击中后登录?

你应该检查几件事:

•输出是否$this->Auth->login()与数据库中的信息相同?将debug($this->Auth->login())看到输出你的登录方法提交表单后.

•密码是否在数据库中正确散列?

•尝试使AuthComponent所有控制器可用,而不仅仅是UsersController.

•不确定这是否有所不同,但parent::beforeFilter();在控制器beforeFilter方法中的其他任何事情之前调用.

编辑:

是否看到您正在尝试根据电子邮件和密码进行验证.默认情况下,AuthComponent需要用户名和密码.您必须明确声明您希望验证电子邮件和密码$this->Auth->login().这来自2.0文档:

public $components = array(
    'Auth'=> array(
        'authenticate' => array(
            'Form' => array(
                'fields' => array('username' => 'email')
            )
        )
    )
);
Run Code Online (Sandbox Code Playgroud)

我相信,你没有看到任何SQL输出这一事实.


Dro*_*ial 6

您还必须检查数据库中的字段"password"是否设置为VARCHAR 50.

在我看来,我正在截断数据库中的哈希密码,而Auth从未发生过.