Пренасочете всички уеб страници под webroot към страница за вход в Cakephp

Използвам cakephp 2.4.5. Бих искал да пренасоча всички потребители, които не са влезли към страница за вход. По принцип следвах наличните инструкции тук.

В обобщение, важната част е следният код към AppController.php

public $components = array('Session',
                            'Auth' => array(
                                'loginRedirect' => array('controller' => 'users', 'action' => 'index'),
                                'logoutRedirect' => array('controller' => 'users', 'action' => 'login'),
                                'authError' => 'You must be logged in to view this page.',
                                'loginError' => 'Invalid Username or Password entered, please try again.'        
                            ));

Всички уебсайтове с този URL формат http://localhost/cakephp245/controllers/XXX ще бъдат пренасочени към страницата за вход. Въпреки това уебсайтове, които се намират в app/webroot с URL адрес, който изглежда като този http://localhost/cakephp245/app/webroot/XXX, няма да бъдат пренасочени към страницата за вход.

Как мога да принудя уебсайтовете, намиращи се в папката app/webroot, да бъдат пренасочени към страницата за вход?

Благодаря ти много.


person user781486    schedule 15.05.2014    source източник
comment
Уебсайтове, разположени в webroot? :с   -  person Konsole    schedule 15.05.2014


Отговори (2)


По-долу са стъпките, които могат да помогнат за разрешаването на проблемите: -

1) Прочетете документацията как да заредите компонента за удостоверяване в appController https://book.cakephp.org/3.0/en/controllers/components/authentication.html
Кодът трябва да бъде като кода по-долу

$this->loadComponent('Auth', [
                'loginAction' => [
                    'controller' => 'Users',
                    'action' => 'login',
                    'plugin' => null
                ],
                //'authorize' => ['Controller'],
                'loginRedirect' => [
                    'controller' => 'Users',
                    'action' => 'dashboard'
                ],
                'logoutRedirect' => [
                    'controller' => 'Users',
                    'action' => 'login',
                ],
                'authenticate' => [
                    'Form' => [
                        'fields' => ['username' => 'email', 'password' => 'password']
                    ]
                ],
                'unauthorizedRedirect' => false,
                'authError' => 'Did you really think you are allowed to see that?',
                'storage' => 'Session'
            ]);

2) Добавете кода по-долу към beforeFilter() на usersController

$this->Auth->allow(['login','logout','register']);  // these function will be pulic access

3) Ето функцията за влизане, поставете я в UserController

 public function login()
    {
        $this->viewBuilder()->layout('adminlogin'); // set the admin login layout 

        $user = $this->Users->newEntity();
        $this->set('user', $user);

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

Добавете тази функция към AppController.

public function beforeFilter() {        
    $this->Auth->deny();        
    $this->Auth->allow('login');
}

По този начин единственото разрешено действие преди влизане е самото влизане. Все пак това няма да направи изображенията или скриптовете или css недостъпни, ако това е, към което се стремите.

Въпреки че не съм напълно сигурен, вярвам, че няма начин да откажете на някого достъп до този тип ресурси.

person lucasreta    schedule 15.05.2014