1

I'm working in CakePHP 3.2 and writing an admin panel where only admin can login.

There is a separate table admins to store admin credentials. There is users table also which is used for users to register/login from main application.

I have to use admins table to login in admin panel.

What I have done is.

<?php
namespace App\Controller;

use Cake\Controller\Controller;
use Cake\Event\Event;


class AppController extends Controller
{

    public function initialize()
    {
        parent::initialize();

        $this->loadComponent('RequestHandler');
        $this->loadComponent('Flash');
        $this->loadComponent('Auth', [
          'loginAction' => [
            'controller' => 'Admins',
            'action' => 'login',
            'plugin' => 'Admins'
          ],
          'loginRedirect' => [
            'controller' => 'ServiceRequests',
            'action' => 'index'
          ],
          'logoutRedirect' => [
            'controller' => 'Admins',
            'action' => 'login'
          ],
          'authenticate' => [
            'Form' => [
              'userModel' => 'Admin',
              'fields' => [
                'username' => 'email',
                'password' => 'password'
              ]
            ]
          ]
        ]);
    }

    public function beforeRender(Event $event)
    {
        if (!array_key_exists('_serialize', $this->viewVars) &&
            in_array($this->response->type(), ['application/json', 'application/xml'])
        ) {
            $this->set('_serialize', true);
        }
    }
}

AdminsController.php

<?php
namespace App\Controller;

use App\Controller\AppController;
use Cake\Event\Event;
use App\Controller\AuthComponent;

/**
 * Admins Controller
 *
 * @property \App\Model\Table\AdminsTable $Admins
 */
class AdminsController extends AppController
{
      public function beforeFilter(Event $event)
      {
          parent::beforeFilter($event);
          $this->Auth->allow('add');
          // Pass settings in using 'all'
          $this->Auth->config('authenticate', [
            AuthComponent::ALL => ['userModel' => 'Members'],
              'Basic',
              'Form'
          ]);
      }

    public function login()
    {
        if ($this->request->is('post')) {
            $user = $this->Auth->identify();
            if ($user) {
                $this->Auth->setUser($user);
                return $this->redirect($this->Auth->redirectUrl());
            }
            $this->Flash->error(__('Invalid username or password, try again'));
        }
    }

    public function logout()
    {
        return $this->redirect($this->Auth->logout());
    }
}

But this is not working. and gives Error: Class App\Controller\AuthComponent' not found

Also I want to restrict access to all controllers and actions without login. Thats why there is no $this->Auth->allow() in AppsController.php

1 Answer 1

2

use Cake\Controller\Component\AuthComponent;

Sign up to request clarification or add additional context in comments.

1 Comment

... and Controller\Component :)

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.