2011-09-30 46 views
1

我在使用验证组件时遇到问题$this->Auth->allow('index','view'); 我使用$this->Auth->allow('*')时,我得到的/ users/login导致了太多的重定向,它工作正常。我使用CakePHP 1.3.12这里是app_controller.phpcakephp验证组件允许重定向问题

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')); 

有什么建议吗? 由于

+0

我使用CakePHP 1.3.12 – mentes

+0

我使用Apache/2.2.17 PHP/5.3.5 – mentes

回答

1

其数组=)

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

你获得这个too many redirects消息具有因的/用户/登录动作是不可访问的。所以服务器试图显示登录页面,但它不能,因为普通的非连接用户没有访问/ 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文件

希望这有助于

+0

感谢您的快速回复我试过这个,但没有运气。即使它不允许索引和查看操作 – mentes

+0

您还需要允许登录操作... – pleasedontbelong

+0

感谢您的评论我试过这一个,但没有运气。我清除缓存和浏览器上的所有内容,但它说了太多的重定向 – mentes

2

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

“如果您在布局或元素中使用requestAction,则应该允许这些操作以便能够正确打开登录页面。”
http://book.cakephp.org/1.3/en/view/1257/allow

这让我难倒了最长的时间。

比方说,你在你的模板某处渲染元素:

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

并在意见/元/ comments.ctp你有一些要求,是

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

动作在你CommentsController您必须:

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

请注意,您正在请求您的c在您的元素中省略控制器。这就是为什么你必须允许该指定控制器的'索引'。

我还没有看到任何地方正确解决这个问题。希望这是什么导致你的错误。

0

你做错了。应用程序如何才能知道您正在尝试控制哪个控制器操作。从控制器执行操作。

从应用中移除此

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

试试这个在您的应用程序控制器,需要更改

 $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('*'); 

而在你登录做到这一点不做任何事情你所有的重定向和所有会由应用程序控制器做。

如果你有关于任何疑问,这个邮件我

[email protected]