Auth… Finally!
- At August 6, 2008
- By Aaron
- In CakePHP
2
Finally, after several attempts, I have Auth working. Now I’ll attempt to explain in a simple manner, like most of the sources I found. I will also attempt to include all caveats, unlike any of the sources I found.
app/config/core.php
Place a salt value in Security.salt.
You may want to increase Session.timeout beyond the default 2 minutes.
app/controller/users_controller.php
uses('sanitize');
class UsersController extends AppController {
public $name = 'Users';
public $components = array('Auth');
function beforeFilter() {
Security::setHash('sha1');
}
// The AuthComponent provides the needed functionality
// or login, so you can leave this function blank.
function login() {
}
function logout() {
$this->redirect($this->Auth->logout());
}
}
Make sure you add Auth to the components array of any controller you plan to have any authentication on:
public $components = array('Auth');
Also you can specify which controller methods do not need authentication like this:
function beforeFilter() {
$this->Auth->allow('index', 'results', 'animal',
'spotlight', 'breed');
}
app/model/
No model file is needed, but you need to create a database table with id, username, and password fields. Any other fields will be paced in the Auth object (inside session), like this:
[Auth] => Array
(
[User] => Array
(
[id] => 53
[first_name] => Aaron
[last_name] => Thies
[email] => athies@gmail.com
[username] => athies
)
)
You can find out what to set the password value in the users db table by using $this->Auth->password(‘password’). This caused me a lot of aggravation as I was just using SHA1(‘password’).
You can tweak Auth using the various Auth methods outlined here: http://book.cakephp.org/view/172/authentication. These methods can be placed inside controller::beforeFilter().
app/views/users/login.ctp
if ($session->check('Message.auth')) $session->flash('auth');
if ($session->check('Message.flash')) {
$session->flash();
}
if ($session->check('Message.auth')) {
$session->flash('auth');
}
echo $form->create('User', array('action' => 'login'));
echo $form->input('username');
echo $form->input('password');
echo $form->end('Login');
A Little Something More
During the course of getting Auth to work I learned this helpful hint.
If you ever produced this error, “Database table users for model User was not found.”, you can fix this by deleting everything in this folder: /app/tmp/cache/models
