Ho un problema di tornare alla pagina referer:Come tornare alla pagina referer in CakePHP dopo il login
first url: http://site.com/venue/apartments/1564/venue-name
referer url: null
In questa pagina posso modificare roba dentro, quindi ho un tasto login
per andare a la pagina di accesso, dopo un login riuscito, vorrei tornare allo first url
.
second url: http://site.com/users/login
referer url: http://site.com/venue/apartments/1564/venue-name
quando provo ad accedere, a causa delle regole di azione CakePHP, devo aggiornare la pagina di login per controllare le credenziali, le problem
inizia da qui:
third url: http://site.com/users/login
referer url: http://site.com/users/login
aggiornando la pagina, e controllando le credenziali nell'azione-del controller users
ottengo come riferimento la stessa pagina in cui ero prima, e ora non posso tornare allo first url
.
ho cercato qualche soluzione impostando una variabile di sessione nel AppController che verifica se non sono nella pagina delle azioni login
e facendo questo:
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'], '/')));
}
}
Testando la sessione var con debug($this->Session->write('redir'));
tutto sembrerebbe funziona perfettamente fino a quando vado al login
azione:
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());
}
}
}
}
In questo modo si rompe l'applicazione e se mi debug($redir);
var ottengo:
array(
'controller' => 'js',
'action' => 'jquery',
(int) 0 => 'plugin/jquery.validata.1.7.min' // just a jquery plugin loaded in default.ctp
)
invece di
array(
'controller' => 'venue',
'action' => 'apartments',
(int) 0 => '1564/venue-name'
)
Se debug($redir);
in qualsiasi altra vista di tutto il sito, tutto funziona bene e ottengo i dati giusti.
Ho pensato a una sorta di routine di protezione sessione per l'azione $this->Auth->login()
ma per me è totalmente privo di senso.
Come posso semplicemente reindirizzare l'utente registrato all'ultima pagina che non è la pagina di visualizzazione login
?
Quindi, ciò che si vuole fare è reindirizzare l'utente al form di login quando cercano di accedere una pagina che richiede l'autenticazione e quindi reindirli a quella pagina quando l'autenticazione ha esito positivo? –
sì, è, non ho trovato un modo giusto per farlo. – vitto
Suppongo che tu sappia che il componente 'Auth' ha questa funzionalità integrata. Basta fare' $ this-> reindirizzare ($ this-> Auth-> redirect()); 'all'interno di' if ($ this-> Auth-> login()) {'block. C'è una ragione per cui non lo stai facendo? – Nick