我根据本教程实现了安全性:
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
}
}
我在这里走在正确的轨道上吗?
答案 0 :(得分:1)
答案 1 :(得分:0)
因此,从dogmatic的链接线程看起来,我需要做的就是从教程中替换这一行:
$this->Auth->loginRedirect = array('controller' => 'alerts', 'action' => 'index');
用这个:
$this->Auth->loginRedirect = array('controller' => 'alerts', 'action' => 'home');
答案 2 :(得分:0)
我认为你已经花了足够的时间与CakePHP一起做下面的步骤。这是解决方案;
将Auth
和Session
组件添加到AppController的组件中(如果您
还没有完成)。从现在开始,所有的控制器都可以使用
身份验证和会话功能。
覆盖beforeFilter()
(或类似控制器)的UsersController
功能
使用该一行代码来管理用户操作;
$this->Auth->loginRedirect = $this->Session->read("Auth.loginRedirect");
本
应该将代码置于函数中,因为PHP不支持函数调用
变量分配。
之后,为了防止错误地重定向到已经重定向的页面,还要将该行添加到
UsersController
的{{1}}功能;
beforeFilter()
如果您确定为每个控制器完成了第4步,则不需要上述代码。
覆盖$this->Session->write('Auth.loginRedirect', "/");
的功能
登录后想要回到那里的控制器
一行代码;
beforeFilter()
。
这个代码的作用就是编写 fullbase
controller / action [/ param1 ...] URL(注意参数
顺便说一句,以$this->Session->write('Auth.loginRedirect', Router::url(null,
true));
名称进行会话。
PS:阅读jocull's comment,找出我没有使用Auth.loginRedirect
的原因。