cakephp auth组件允许重定向问题

时间:2011-09-30 10:44:45

标签: redirect components cakephp-1.3 authentication

我使用$this->Auth->allow('index','view');时遇到Auth组件问题 当我使用$this->Auth->allow('*')时,我得到/ users / login导致了太多的重定向,它运行正常。我在使用cakephp 1.3.12这里是app_controller.php

class AppController extends Controller {
    var $components = array('Auth','Session');
    function beforeFilter(){    
         $this->Auth->allow('index','view');
    } 
}

我更改了app_controller.php

class AppController extends Controller {
    var $components = array('Auth','Session');
    function beforeFilter(){    
        $this->Auth->allow(array('index','view','display'));
    }
}

users_controller.php中

class UsersController extends AppController {

var $name = 'Users';

function beforeFilter() {
    parent::beforeFilter();
    $this->Auth->allow(array('login','logout'));
}

function login() {
    if ($this->Session->read('Auth.User')) {
        $this->redirect('/', null, false);
    }
}

routes.php文件

Router::connect('/', array('controller' => 'pages', 'action' => 'display', 'home'));
Router::connect('/pages/*', array('controller' => 'pages', 'action' => 'display'));

有什么建议吗? 感谢

3 个答案:

答案 0 :(得分:2)

不知道,但您可能想检查是否有任何请求操作。

“如果您在布局或元素中使用requestAction,则应允许这些操作,以便能够正确打开登录页面。”

http://book.cakephp.org/1.3/en/view/1257/allow

这让我难以忍受了最长时间。

假设您在模板中的某处呈现元素:

echo $this->element('comments');

在views / elements / comments.ctp中,你有一些请求像

这样的动作
$comments = $this->requestAction('comments/index');
foreach($comments as $comment) {
 // print stuff
}

在你的CommentsController中你必须:

function beforeFilter() {
    $this->Auth->allow('index');
}

请注意,您正在从元素中的注释控制器请求索引操作。这就是为什么你必须允许特定控制器的“索引”。

我还没有在任何地方看到这个问题。希望这是导致错误的原因。

答案 1 :(得分:1)

它的数组=)

$this->Auth->allow(array('index','view'));

您收到too many redirects消息,因为无法访问/ user / login操作。因此服务器尝试显示登录页面,但它不能,因为常规的非连接用户没有访问/ user / login。当用户无法访问页面时,服务器会将他重定向到登录页面...所以你看,它是一个无限循环。

/ user / login操作应该授权给每个人。您的Users控制器应如下所示:

class UsersController extends AppController {

var $name = 'Users';
function beforeFilter() {
    parent::beforeFilter();
    $this->Auth->allow(array('login','logout'));
}

function login(){
    if ($this->Session->read('Auth.User')) {
        $this->redirect('/', null, false);
    }
}

    //if you're using prefix routes. 
function admin_login(){
    $this->redirect('/users/login');
}

如果这不是问题,也许你是在routes.php中重定向页面

希望这有帮助

答案 2 :(得分:0)

你做错了。应用程序怎样才能知道你正在尝试控制器的哪个控制器动作。从你的控制器那里做。

从应用

中删除它
  

$这 - > Auth->允许(阵列( '索引', '观看', '显示器'));

在app控制器中尝试此操作并进行必要的更改

        $this->Auth->loginError = "Wrong credentials. Please provide a valid username and password.";

        $this->Auth->authError = "You don't have sufficient privilege to access this resource.";

        $this->Auth->loginAction = array('controller' => 'users', 'action' => 'login');

        $this->Auth->logoutRedirect = array('controller' => 'users', 'action' => 'login');

        $this->Auth->loginRedirect = array('controller' => 'users', 'action' => 'dashboard');

从您的用户控制器执行此操作

$this->Auth->userModel = 'User';
$this->Auth->allow('*');

在您的登录信息中,不要对您的所有重定向执行任何操作,并且所有操作都由app控制器执行。

如果您对此邮件有任何疑问

  

jafarkv9@gmail.com