使用Auth组件的重定向问题


Redirection Issue using Auth Component

我有我的主屏幕与登录表单和注册按钮在以下位置-

http://localhost/myproject/user/login

当用户点击注册按钮时,页面被重定向到-

http://localhost/myproject/user/register

我有登录表单在页面的顶部和注册表单在底部。现在,当我填写登录表单并提交时,如果登录失败,用户将被重定向到

http://localhost/myproject/user/login

相反,我希望将用户重定向到 http://localhost/myproject/user/register

我如何实现这个行为?

我会在你的Users_Controllers中做一些像这样的事情。

注意:我没有尝试过,我不确定它是否有效…我可以在尝试之后转发…

首先你需要将自动重定向设置为False

class UsersController extends AppController{
    //...
    function beforeFilter(){
         parent::beforeFilter();
         $this->Auth->autoRedirect = FALSE;
    }
    function login(){
        if( !(empty($this->data)) && $this->Auth->user() ){
            //...
        }else{
            //If useR didnt/cant login redirect to register
            $this->redirect(array('controller' => 'users', 'action' => 'register'));
            // Or if you have routes setup for /register
            $this->redirect('/register');
        }
    }

希望这对你有所帮助。如果没有,我会尝试一些东西,稍后再发布}

如果您添加代码示例,我们可能能够更好地帮助您。

听起来你有两个问题之一:

  1. 您有具有相同ID或名称的表单或提交按钮。
  2. 你的表单被张贴到同一个地方。

当登录失败时,您是否真的将重定向到/user/login ?或者登录表单操作url总是指向/user/登录页面,这意味着如果登录失败,您只需留在页面上,因为您在检查凭据时已经在该页面上了?

如果我是对的,当登录失败时,您可以通过检查/user/login操作中的referer来获得您想要的内容,在这种情况下,如果referer是/user/register,则重定向到/user/register。

在beforeFilter中自动重定向并手动重定向

function beforeFilter()
{
    parent::beforeFilter();
    $this->Auth->autoRedirect = false;
}
function login()
{
    if ($this->RequestHandler->isPost()
    {
        if ($this->Auth->user()
        {
            $this->redirect($this->Auth->redirect());
        }
        else
        {
            $this->redirect('/users/register');
        }
    }
    // ... 
}