Thursday, 3 July 2014

Cakephp Auth login

// 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; ?> 

0 comments:

Post a Comment