Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

CakePHP simple authentication tutorial is not working

I'm new to CakePHP. I'm trying the Cake cookbook tutorial of simple authentication with CakePHP 2.4.1.
I'm always getting "Invalid username or password, try again" although I typed the correct username and password.

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

According to the AuthComponent API, if the parameter to Auth->login() is empty or not specified, the request will be used to identify a user. The debugging query output shows

SELECT `User`.`id`, `User`.`username`, `User`.`password`, `User`.`role`, `User`.`created`, `User`.`modified` 
FROM `cake_dvdcatalog`.`users` AS `User` WHERE `User`.`username` = 'admin' LIMIT 1

Here is my User model:

// app/Model/User.php
App::uses('AuthComponent', 'Controller/Component');

class User extends AppModel {

    public $validate = array(
        'username' => array(
            'required' => array(
                'rule' => array('notEmpty'),
                'message' => 'A username is required'
            )
        ),
        'password' => array(
            'required' => array(
                'rule' => array('notEmpty'),
                'message' => 'A password is required'
            )
        ),
        'role' => array(
            'valid' => array(
                'rule' => array('inList', array('admin', 'author')),
                'message' => 'Please enter a valid role',
                'allowEmpty' => false
            )
        )
    );

    public function beforeSave($options = array()) {
        if (isset($this->data[$this->alias]['password'])) {
            $this->data[$this->alias]['password'] = AuthComponent::password($this->data[$this->alias]['password']);
        }
        return true;
    }
}
like image 707
Sithu Avatar asked Sep 21 '26 10:09

Sithu


1 Answers

You have to check your Encrypted Password, Cakephp By Default use SHA1, So it's beter to create a user using Cakephp with SHA1 password, Add beforesave method in user model to encrypt password

like image 55
Santosh Yadav Avatar answered Sep 24 '26 02:09

Santosh Yadav