mam problem na powrót do strony odsyłający:Jak wrócić do strony odsyłający w CakePHP po zalogowaniu
first url: http://site.com/venue/apartments/1564/venue-name
referer url: null
Na tej stronie można edytować rzeczy w środku, więc mam login
przycisk, aby przejść do stronę logowania, po pomyślnym zalogowaniu, chciałbym wrócić do first url
.
second url: http://site.com/users/login
referer url: http://site.com/venue/apartments/1564/venue-name
gdy próbuję się zalogować, ze względu na zasady działania CakePHP, muszę odświeżyć stronę logowania do sprawdzenia poświadczenia, że problem
zaczyna się tutaj:
third url: http://site.com/users/login
referer url: http://site.com/users/login
odświeżając stronę, a sprawdzanie poświadczeń w sterowniku login
sterownika users
otrzymuję jako odsyłającą tę samą stronę, na której byłem wcześniej, i teraz nie mogę wrócić do first url
.
Próbowałem jakieś rozwiązanie przez ustawienie zmiennej sesji w AppController który sprawdza, czy nie jestem na stronie akcji login
i robi to:
AppController.php
public function beforeFilter() {
$this->setRedirect();
}
public function setRedirect() {
if ($this->request->params['controller'] != 'users' && $this->request->params['action'] != 'login') {
$this->Session->write('redir', array('controller'=>$this->request->params['controller'], 'action'=>$this->request->params['action'], implode($this->request->params['pass'], '/')));
}
}
Testując var sesji z debug($this->Session->write('redir'));
wszystko wydaje się działa idealnie, dopóki nie iść do działania login
:
UsersController.php
public function login() {
if ($this->request->is ('post')){
if ($this->Auth->login()) {
$redir = $this->Session->read('redir');
if (!empty($redir)) {
$this->redirect ($redir);
} else {
$this->redirect ($this->Auth->redirect());
}
}
}
}
Spowoduje to przerwać stosowanie i gdybym debug($redir);
var uzyskać:
array(
'controller' => 'js',
'action' => 'jquery',
(int) 0 => 'plugin/jquery.validata.1.7.min' // just a jquery plugin loaded in default.ctp
)
zamiast
array(
'controller' => 'venue',
'action' => 'apartments',
(int) 0 => '1564/venue-name'
)
Gdybym debug($redir);
w każdym innym widoku całej strony, wszystko działa dobrze i uzyskać odpowiednie dane.
Pomyślałem o czymś w rodzaju rutynowej ochrony sesji dla akcji $this->Auth->login()
, ale dla mnie to kompletnie nonsens.
Jak mogę po prostu przekierować użytkownika zalogowanego na ostatnią stronę, która nie jest stroną widoku login
?
Więc, co chcesz zrobić, to przekierowanie użytkownika do formularza logowania, gdy próbują uzyskać dostęp stronę, która wymaga auth, a następnie przekierowanie do tej strony, gdy auth się powiedzie? –
tak, to jest, nie znalazłem odpowiedniego sposobu na zrobienie tego. – vitto
Zgaduję, że wiesz, że komponent 'Auth' ma wbudowaną tę funkcję. Po prostu wykonaj' $ this-> redirect ($ this-> Auth-> redirect()); 'wewnątrz' if ($ this-> Auth-> login()) {'blok. Czy istnieje powód, dla którego tego nie robisz? – Nick