我使用$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'));
有什么建议吗? 感谢
答案 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