Ссылка для входа в систему с текущей страницей, переданной в виде строки запроса, которая затем использует ее для отправки пользователя обратно - PullRequest
0 голосов
/ 21 августа 2011

Как мне создать ссылку для входа на страницу CakePHP, которая содержит строку запроса с текущей страницей, например: domain.com/login/?back=/posts/This_is_a_post

, а затем, как я могу использовать это в методе login дляотправить пользователя НАЗАД на этот URL?

Я пробовал это: <?php echo $this->Html->link('Log in', array('controller'=>'users','action'=>'login','admin'=>false, '?'=> array('back'=>$this->here)), array('escape'=>false)); ?>

, но он делает это на URL /login?back=%2Fportfolio%2Fgt%2FCreatHive

как мне его получитьНЕ меняйте / в URL

Cheers

Ответы [ 2 ]

0 голосов
/ 22 августа 2011

Лучший способ сделать это - сохранить последнюю страницу, посещенную в сеансе в какой-то момент, возможно, когда страница загружена в действии login или чем-то еще. Почему ты спрашиваешь? Как атакованный может сделать ссылку на ваш сайт, например: yoursite.com/login?back=mysite.com/login, так что когда пользователь входит в систему, вы отправляете их на мой сайт, который является точной копией вашей формы входа и получаете их для входа снова. Вуаля, злоумышленник теперь может легко перехватить информацию о ваших пользователях.

С сессиями также не будет проблем с кодировкой URL. Просто вот так в вашем 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());
}
0 голосов
/ 21 августа 2011

Обновление - попробуйте использовать именованные параметры вместо:

По вашей ссылке:

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));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...