Skip to main content

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

Comments

Popular posts from this blog

Generate XML file in Cakephp

Steps to Generate XML file using CakePHP: Step-1 Enable to parse xml extension in config route.php file.     Router::parseExtensions('xml'); Step-2 Add Request Handler Component to the Controller    var $components = array(‘RequestHandler’); Step-3 Add controller Action For XML Generation in Post Controller     function generateXMLFile()     {         if ($this->RequestHandler->isXml()) { // check request type             $this->layout = 'empty'; // create an empty layout in app/views/layouts/empty.ctp              }        }  Add header code in empty layout <?php header('Content-type: text/xml');?> <?php echo $this->Xml->header(); ?> <?php echo $content_for_layout; ?> Step-4 Set up View To generate XML Create xml folder inside Posts vi...

Simple JavaScript Object and Class Examples

In JavaScript, most things are objects. An object is a collection of related data and/or functionality Namespace: Everything you create in JavaScript is by default global. In JavaScript namespace is Global object . How to create a namespace in JavaScript? Create one global object, and all variables, methods, and functions become properties of that object. Example:  // global namespace var MYAPP = MYAPP || {}; Explaination: Here we first checked whether MYAPP is already defined.If yes, then use the existing MYAPP global object, otherwise create an empty object called MYAPP How to create sub namespaces? // sub namespace MYAPP.event = {}; Class JavaScript is a prototype-based language and contains no class statement.JavaScript classes create simple objects and deal with inheritance. Example: var Person = function () {}; Explaination: Here we define a new class called Person with an empty constructor. Use the class keyword class Calculation {}; A class expr...

How to Add Next Previous links to The Event Calendar

Add Next/Previous links to The Event Calendar Wordpress Plugin Add code to your child theme’s functions.php file /**  * Allows visitors to page forward/backwards in any direction within month view */ if ( class_exists( 'Tribe__Events__Main' ) ) { class ContinualMonthViewPagination {     public function __construct() {         add_filter( 'tribe_events_the_next_month_link', array( $this, 'next_month' ) );         add_filter( 'tribe_events_the_previous_month_link', array( $this, 'previous_month' ) );     }     public function next_month() {         $url = tribe_get_next_month_link();         $text = tribe_get_next_month_text();         $date = Tribe__Events__Main::instance()->nextMonth( tribe_get_month_view_date() );         return '<a data-month="' . $date . '" href="' . $url . '" rel="next"...