// Define Auth Component in AppController
class AppController extends Controller {
public $components = array(
'Session',
'Auth' => array(
'loginRedirect' => array(
'controller' => 'users', // Redirect URL after login action
'action' => 'index'),
'logoutRedirect' => array(
'controller' => 'users', // Redirect URL after logout action
'action' => 'login'),
'authError' =>'',
'authenticate' => array(
'Form' => array(
'fields' => array('username' => 'email') // By default Auth components takes username
)
)
)
);
}
// Define Login & logout function in UsersController
class UsersController extends AppController {
public function beforeFilter() {
parent::beforeFilter();
// Allow users to register and logout.
$this->Auth->allow('login','add', 'logout');
}
//login functionality here
public function login() {
if ($this->request->is('post')) {
if ($this->Auth->login()) {
$this->redirect($this->Auth->redirectUrl()); // Redirect to login URL
} else {
$this->Session->setFlash(__('Invalid username or password'));
}
}
}
//Logout function here
public function logout() {
return $this->redirect($this->Auth->logout());
}
//add User function
public function add() {
if ($this->request->is('post')) {
$this->User->create();
$this->User->save($user)
}
}
}
// User Model for save functionality
class User extends AppModel {
public function beforeSave($options = array()) {
if (isset($this->data[$this->alias]['password'])) {
$passwordHasher = new SimplePasswordHasher();
$this->data[$this->alias]['password'] = $passwordHasher->hash(
$this->data[$this->alias]['password']
);
}
return true;
}
}
// Remember me functionality in login function
function login() {
if ($this->Auth->user()) {
if (!empty($this->data['User']['remember_me'])) {
$cookie = array();
$cookie['username'] = $this->data['User']['username'];
$cookie['password'] = $this->data['User']['password'];
$this->Cookie->write('Auth.User', $cookie, true, '+2 weeks');
unset($this->data['User']['remember_me']);
}
$this->redirect($this->Auth->redirect());
}
if (empty($this->data)) {
$cookie = $this->Cookie->read('Auth.User');
if (!is_null($cookie)) {
if ($this->Auth->login($cookie)) {
// Clear auth message, just in case we use it.
$this->Session->delete('Message.auth');
$this->redirect($this->Auth->redirect());
}
}
}
}
// Multiple Auth access in same application
// Configure the prefix in core file
Configure::write('Routing.prefixes', array('admin','member','user'));
App::uses('Controller', 'Controller');
class AppController extends Controller {
public $components = array('Security','Cookie','Session','Auth','RequestHandler');
public $helpers = array('Cache','Html','Session','Form');
function beforeFilter() {
if ($this->request->prefix == 'admin') {
$this->layout = 'admin';
AuthComponent::$sessionKey = 'Auth.Admin';
$this->Auth->loginAction = array('controller'=>'administrators','action'=>'login');
$this->Auth->loginRedirect = array('controller'=>'administrators','action'=>'index');
$this->Auth->logoutRedirect = array('controller'=>'administrators','action'=>'login');
$this->Auth->authenticate = array(
'Form' => array(
'userModel' => 'User', // Defines the model
)
);
$this->Auth->allow('login');
} else if ($this->request->prefix == 'user') {
AuthComponent::$sessionKey = 'Auth.Phys';
$this->Auth->loginAction = array('controller'=>'users','action'=>'login');
$this->Auth->logoutRedirect = '/';
$this->Auth->authenticate = array(
'Form' => array(
'userModel' => 'Physician',
)
);
}
}
public function isAuthorized($user){
// You can have various extra checks in here, if needed.
return true;
}}
//Create helper to check user login or not
<?
class AccessHelper extends Helper{
var $helpers = array("Session");
function isLoggedin(){
App::import('Component', 'Auth');
$auth = new AuthComponent();
$auth->Session = $this->Session;
$user = $auth->user();
return !empty($user);
}
?>
var $helpers = array('Access'); //Call it in controller
Now check in view
<? if($access->isLoggedin()): ?><? echo $html->link('delete', '/posts/delete/'.$post['Post']['id'], NULL, 'Are you sure?'); ?><? endif; ?>
Comments
Post a Comment