如何在CakePHP页面上创建一个包含当前页面查询字符串的登录链接,例如:domain.com/login/?back=/posts/This_is_a_post
然后如何在login
方法中使用此功能将用户BACK发送到此网址?
我试过这个:<?php echo $this->Html->link('Log in', array('controller'=>'users','action'=>'login','admin'=>false, '?'=> array('back'=>$this->here)), array('escape'=>false)); ?>
但它在网址/login?back=%2Fportfolio%2Fgt%2FCreatHive
如何让它不更改网址中的/
干杯
答案 0 :(得分:0)
更新 - 请尝试使用命名参数:
您的链接:
echo $this->Html->link('My Link', array('controller' => 'users', 'action' => 'login', 'url' => $url));
在您的用户中登录:
function login(){
if($this->Session->read('Auth.User')){
$url = $this->params['named']['url']
// encode/decode url
$this->redirect("$url");
}
}
您可以随时将urlencode()和urldecode()用于$ url变量。
您还需要确保您的表单还将URL发送回登录功能:
echo $this->Form->create('User', array('controller' => 'users', 'action' => 'login', 'url' => $url));
答案 1 :(得分:0)
执行此操作的最佳方法是在某个时间点存储会话中访问的最后一页,可能是在login
操作中加载页面时。你为什么问?攻击者可以链接到您的网站,例如:yoursite.com/login?back=mysite.com/login
,这样当用户登录时,您就会将其发送到我的网站,这与您的登录表单完全相同并获取他们再次登录。 Voila,攻击者现在可以轻松地窃取用户信息。
对于会话,也没有网址编码问题。在您的login
操作中就是这样的:
$this->Session->set('back_to', $this->referer());
// Then if they have logged in:
$backTo = $this->Session->read('back_to');
if($backTo) {
$this->redirect($back_to);
} else {
$this->redirect($this->Auth->redirect());
}