cakephp:登录后重定向回初始请求

时间:2011-01-31 02:58:07

标签: php cakephp cakephp-1.3

我根据本教程实现了安全性:

http://book.cakephp.org/view/1543/Simple-Acl-controlled-Application

我想要它做的是,如果用户发出请求但未登录,则会显示登录页面,然后重定向回原始请求。

我认为我需要在app_controller.php(顶级控制器)中添加代码以将初始请求保存为会话变量,然后在用户控制器的此函数末尾添加一行以重定向到保存价值:

function login() {
        if ($this->Session->read('Auth.User')) {
            $this->Session->setFlash('You are logged in!');
            // redirect to referrer here
        }
    }   

我在这里走在正确的轨道上吗?

3 个答案:

答案 0 :(得分:1)

答案 1 :(得分:0)

因此,从dogmatic的链接线程看起来,我需要做的就是从教程中替换这一行:

$this->Auth->loginRedirect = array('controller' => 'alerts', 'action' => 'index');

用这个:

$this->Auth->loginRedirect = array('controller' => 'alerts', 'action' => 'home');

答案 2 :(得分:0)

我认为你已经花了足够的时间与CakePHP一起做下面的步骤。这是解决方案;

  1. AuthSession组件添加到AppController的组件中(如果您 还没有完成)。从现在开始,所有的控制器都可以使用 身份验证和会话功能。

  2. 覆盖beforeFilter()(或类似控制器)的UsersController功能 使用该一行代码来管理用户操作;

    $this->Auth->loginRedirect = $this->Session->read("Auth.loginRedirect");

    本 应该将代码置于函数中,因为PHP不支持函数调用 变量分配。

  3. 之后,为了防止错误地重定向到已经重定向的页面,还要将该行添加到 UsersController的{​​{1}}功能;

    beforeFilter()

    如果您确定为每个控制器完成了第4步,则不需要上述代码。

  4. 覆盖$this->Session->write('Auth.loginRedirect', "/");的功能 登录后想要回到那里的控制器 一行代码;

    beforeFilter()

    这个代码的作用就是编写 fullbase controller / action [/ param1 ...] URL(注意参数 顺便说一句,以$this->Session->write('Auth.loginRedirect', Router::url(null, true));名称进行会话。

  5. PS:阅读jocull's comment,找出我没有使用Auth.loginRedirect的原因。