我想在我的主页上有一个登录表单,注册用户应该重定向到users / index
使用以下代码,我的主页将重定向循环
谁能告诉我问题在哪里?
注意: - 实际上,如果我将行更改为
,它将完美地工作$this->Auth->loginAction = array('controller' => 'users', 'action' => 'login');
App Controller
public function beforeFilter(){
$this->Auth->autoRedirect = false;
$this->Auth->loginAction = array('controller' => './', 'action' => 'index');
$this->Auth->loginRedirect = array('controller' => 'users', 'action' => 'index');
$this->Auth->logoutRedirect = array('controller' => './', 'action' => './');
$this->Auth->authorize = 'controller';
$this->Auth->authError= 'You need permissions to access this page';
$this->Auth->allow('index');
$this->set('Auth',$this->Auth);
}
UsersController
public function login(){
$id = $this->Auth->user('id');
if(empty($id)){
if($this->request->is('post')){
if($this->Auth->login()){
$this->redirect($this->Auth->redirect());
}else{
$this->Session->setFlash('Invalid Username or password');
}
}
}else{
$this->redirect(array('action'=>'index'));
}
}
感谢您的帮助...
答案 0 :(得分:1)
你几乎回答了自己的问题:
注意: - 实际上,如果我将行更改为
,它将完美地工作$ this-> Auth-> loginAction = array('controller'=>'users','action'=>'login');
确实这会起作用,这应该是它的样子。现在,您告诉auth组件您的loginAction(保存您的登录逻辑的操作)是index
控制器的./
操作(甚至不存在)。我假设你将它与loginRedirect
变量混淆,后者用于在成功验证后设置页面。
答案 1 :(得分:0)
如果您只想让注册用户访问您的网站,您可以拥有类似的内容......至少,这是我在我的网站中实现类似内容的方式......
在app_controller文件中,将以下内容添加到beforeFilter()函数的开头
function beforeFilter(){
//Check if user was able to log in thru Auth using your form in the homepage
if($this->isLoggedIn() == TRUE){
$this->layout = 'default'
}else{
// You can created this layout with a login form and
// whatever else you need except <?php echo $content_for_layout; ?>
// Any registered user will be allowed to login using the form
// and continue on to your site using the default layout
// But it guarantees no one else can see your default site
$this->layout = "unregistered_user"
}
}
在App_controller.php上,您可以创建此功能
function isLoggedIn(){
// You can also use $this->Auth->user directly in your App's beforeFilter()
// But I just like to have functions so I can reuse
if($this->Auth->user()){
$loggedin= TRUE;
}else{
$loggedin= FALSE;
}
return $loggedin;
}
我的网站类似,但只在维护模式下使用。我还在开发我的网站。我用这种方式看到的唯一问题,我还没有时间/需要看,是我的错误没有发送到我想要的布局。假设用户输入http://www.mydomain.com/inexistentpage然后蛋糕将它们转移到我的默认布局。它可能很容易修复,但我没有时间这样做。
注意:我很快就做到了这一点,因此,此代码未经测试。但是,如果您有任何问题,请告诉我,我会测试并发回。
答案 2 :(得分:0)
在视图中使用$this->requestAction(anotherController/action);
可能会调用另一个控制器 - &gt;操作。您必须确保另一个控制器 - &gt;操作具有正确的权限。或者你会得到重定向循环。
通过将$this->auth->allow('action name');
添加到beforeFilter()回调中的另一个控制器页面来解决它。