2015-04-29 8 views
6

Ho una pagina con un certo contenuto su di esso e una sezione commenti. I commenti possono essere lasciati solo dagli utenti che hanno effettuato l'accesso, quindi ho aggiunto un modulo di accesso alla pagina per gli utenti con cui effettuare l'accesso (questo mostra solo se non sono già registrati).Laravel 5 - Dopo il login reindirizzare alla pagina precedente

Il problema che ho è che quando l'utente si registra vengono reindirizzati alla home page e non alla pagina in cui si trovavano precedentemente.

Non ho modificato il metodo di accesso dal set-up della confezione.

Qualcuno può suggerire un modo semplice per impostare l'URL di reindirizzamento. I miei pensieri sono che sarebbe bello poterlo impostare nella forma.

+1

Anche se la risposta qui allude a Laravel 4, sono sicuro che funzionerà ancora in 5. http://stackoverflow.com/questions/15389833/laravel-redirect-back-to-original-destination-after- login – infomaniac

+0

Hmm Laravel 4 e 3 non ha eseguito i contratti autentificabili di laravel 5, non penso che saranno rilevanti. –

risposta

-6

In

app/HTTP/Controller/Aut/AuthController.php

aggiungere questa linea e il cambiamento '/' alla vostra posizione.

protetto $ redirectPath = '/';

+0

Ciao, l'ho sfruttato aggiungendo del codice aggiuntivo per verificare se un percorso specifico fosse stato dichiarato nel modulo e se avesse aggiornato il $ redirectPath (con alcuni controlli di sicurezza aggiuntivi). Grazie. – cs1h

+0

Questo in realtà non risponde alla domanda. Cosa succede se l'utente proviene da una pagina a caso? Li reindirizzerà sempre solo all'URL specificato. Deve guardare l'URL precedente, inviarti per accedere e dopo aver effettuato l'accesso, ti rimanda all'URL originale da cui vieni. –

-1

È possibile utilizzare redirect indietro con laravel 5:

<?php namespace App\Http\Controllers; 

use Redirect; 
class SomeController extends Controller { 
    public function some_method() { 
     return Redirect::back() 
    } 
} 
8

Si prega di utilizzare redirect()->intended() invece in laravel 5.1

Puoi inoltre vedere di più qui: http://laravel.com/docs/5.1/authentication

+0

Questo ha funzionato anche impostando 'url.intended' nella sessione in cui ho reindirizzato per accedere: Session :: put ('url.intended', \ URL :: full()); – antoineMoPa

17

Soluzione per laravel 5.3:

In loginController sovrascrive la funzione showLoginForm() come questa:

public function showLoginForm() 
{ 
    if(!session()->has('url.intended')) 
    { 
     session(['url.intended' => url()->previous()]); 
    } 
    return view('auth.login');  
} 

Imposta la variabile di sessione "url.intended", cioè quella che laravel utilizza per cercare la pagina che si desidera reindirizzare dopo l'accesso, con l'url precedente.

Controlla inoltre se la variabile è stata impostata, in modo da evitare che la variabile venga impostata con l'url di accesso se l'utente invia il modulo con un errore.

6

Per laravel 5.3

all'interno App/Http/Controllers/Auth/LoginController aggiungere questa riga al __construct() funzione di

$this->redirectTo = url()->previous(); 

Quindi il codice completo sarà

public function __construct() 
{ 
    $this->redirectTo = url()->previous(); 
    $this->middleware('guest', ['except' => 'logout']); 
} 

Funziona come un fascino per me sto usando laravel 5.3.30

+1

Grazie per la risposta, che funziona bene - ma affinché ciò accada, sembra che devi "includere" il modulo di accesso nella pagina in cui vuoi essere reindirizzato. Effettuare l'accesso andando su "tuo.app/login" ti reindirizzerà solo alla pagina "/ home". –

+0

Funziona come un fascino con Laravel 5.5 – Onix

0

Usa THSS

ritorno Redirect :: indietro ('back-url')

3

Per laravel 5.4, seguente codice ha funzionato per me, semplicemente aggiornando LoginController.php

use Illuminate\Support\Facades\Session; 
use Illuminate\Support\Facades\URL; 


public function __construct() 
{ 
    $this->middleware('guest', ['except' => 'logout']); 
    Session::put('backUrl', URL::previous()); 
} 


public function redirectTo() 
{ 
    return Session::get('backUrl') ? Session::get('backUrl') : $this->redirectTo; 
} 
0

Per Laravel 5.5, il codice seguente ha funzionato per me semplicemente aggiornando LoginController.php

public function showLoginForm() 
{ 
    session(['link' => url()->previous()]); 
    return view('auth.login'); 
} 


protected function authenticated(Request $request, $user) 
{ 
    return redirect(session('link')); 
} 
Problemi correlati