Аут разрешить не работает всегда перенаправляет на вход - PullRequest
1 голос
/ 09 февраля 2011

У меня есть это в orders_controller.php

function beforeFilter() {
    $this->Auth->allow('checkout', 'checkout_confirm', 'checkout_done');
    parent::beforeFilter();
}

Когда я пытаюсь перейти к заказам / оформлению заказа, он всегда перенаправляет меня к пользователям Не знаю, где искать решение.

У меня есть app_controller.php в приложении /

class AppController extends Controller {
    var $components = array(
            'Email',
            'RequestHandler',
            'Session',
            'Cookie',
            'Auth' => array(
                'fields' => array(
                    'username' => "email",
                    'password' => "password"
                ),
                'autoRedirect' => true,
                'loginAction' => array('controller' => "users", 'action' => "login", 'admin' => false), //                'loginRedirect' => array('controller'
=> "users", 'action' => "check_account") //                'loginRedirect' => array('admin' => false, 'controller' => "users", 'action' => "account_home")
            ),
            'Acl',
            'Loviu'
    );

    var $helpers = array('Html', 'Form', 'Paginator', 'Session', 'Image', 'Javascript', 'Time', 'Text', 'Embed', 'Loviu');
    var $uses = array('User', 'Shelf');


function beforeFilter() {

    if (isset($this->params['admin']) && (1 == $this->params['admin'])) {

        $this->testAccess("admin");

    }

if($this->params['controller'] == 'pages'){
        $this->Session->write('menu.active', 'inactive');
    }

    $this->Auth->allow('display');

    if (false == $this->Session->check('Auth.User')) {

        if (empty($this->data)) {
            $cookie = $this->Cookie->read('Auth.User');
            if (false == is_null($cookie)) {
                // login user
                if ($this->Auth->login($cookie)) {
                    // delete auth message
                    $this->Session->delete('Message.auth');
                }
                else {
                    // delete invalid cookie
                    $this->Cookie->delete('Auth.User');
                }
            } elseif(!$this->Session->read('loggedOut') && $this->params['action'] != 'login_fb') {
                 $this->__checkFBStatus();
            }
        }
    }

    $this->set('user_id', $this->User->id);

    $this->set('lng', $this->Cookie->read("language") ? $this->Cookie->read("language") : 'eng');
    parent::beforeFilter();
}

Ответы [ 4 ]

1 голос
/ 24 марта 2015

У меня была та же проблема, и я решил ее для своего проекта.

Моя версия 3. CakePHP, пока вы загружаете компонент, просто введите логин.

class AppController extends BaseController
{
    public function initialize()
    {
        $this->loadComponent('Flash');
        $this->loadComponent('Auth', [
            'loginAction' => [
                'controller' => 'Admin',
                'action' => 'login',
                'plugin' => 'Admin'
            ],
            'loginRedirect' => [
                'controller' => 'admin',
                'action' => 'dashboard'
            ],
            'logoutRedirect' => [
                'controller' => 'admin',
                'action' => 'login'
            ]
        ]);
    }

}

надежда помогает другим.

1 голос
/ 13 апреля 2011

Я бы также добавил строку $this->Auth->allow('checkout', 'checkout_confirm', 'checkout_done'); в ваш app_controller. По моему опыту, иногда проблема заключается в том, что система путает, к какому контроллеру относится это действие, в зависимости от того, как настроен ваш код.

Вот то, что я использую в моем app_controller, которое было идеально, на случай, если это поможет:

function beforeFilter() {
    $this->allowAccess();
}

private function allowAccess() {
// this actually searches the URL to see what controller you're accessing, and allows actions for that controller.
    if(in_array($this->name, array('Pages'))) {
        $this->Auth->allow(array('home','blog','index'));
    }
}

Эта специфика избавила меня от многих проблем, и вызов Auth->Allow в app_controller - вот, где это действительно должно быть. Надеюсь, это поможет!

0 голосов
/ 03 мая 2013

если вы работаете на cakephp 2.x, вы должны сделать так:

function beforeFilter(){       
    $this->Auth->allow(array('action you want to allow1','action you want to allow2'));
}

allow(array()) instead allow()

--- поместите этот код в контроллер и выполните действие, которое вы хотите разрешить доступ без входа в систему

если вы используете $ this-> Auth-> allow (), вы должны вызвать parent :: beforeFilter (); в функции beforeFilter () вот так:

function beforeFilter(){     
             parent::beforeFilter();    
    $this->Auth->allow('add','view');
}
0 голосов
/ 21 сентября 2012

@ rncrtr ответ работал для меня, но мне пришлось добавить parent :: beforeFilter () в метод allowAccess:

public function beforeFilter() {
  parent::beforeFilter();
  $this->allowAccess();
}

private function allowAccess() {
   if (in_array($this->name, array('Pages'))) {
     $this->Auth->allow(array('home','index','display'));
   }
 }

О да, мне также пришлось добавить display в массив allow.

...