web-dev-qa-db-fra.com

Laravel 5 - Après la connexion, redirection vers la page précédente

J'ai une page avec du contenu et une section de commentaires. Les commentaires ne peuvent être laissés que par les utilisateurs connectés. J'ai donc ajouté un formulaire de connexion à la page pour permettre aux utilisateurs de se connecter (ceci s'affiche uniquement s'ils ne sont pas déjà connectés).

Le problème que j'ai, c'est que lorsque l'utilisateur se connecte, il est redirigé vers la page d'accueil et non vers la page sur laquelle il était auparavant.

Je n'ai pas changé la méthode de connexion à partir de la configuration prête à l'emploi.

Quelqu'un peut-il suggérer un moyen simple de définir l'URL de redirection. Je pense qu'il serait bon de pouvoir le définir dans le formulaire.

17
cs1h

Solution pour laravel 5.3:

Dans loginController, écrasez la fonction showLoginForm () comme suit:

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

Il définira la variable de session "url.intended", celle utilisée par laravel pour rechercher la page à rediriger après la connexion, avec l'URL précédente.

Il vérifie également si la variable a été définie afin d'éviter que la variable ne soit définie avec l'URL de connexion si l'utilisateur soumet le formulaire avec une erreur.

31
Diguin

Veuillez utiliser redirect()->intended() à la place dans Laravel 5.1

Vous pouvez également en savoir plus ici: http://laravel.com/docs/5.1/authentication

11
bnqtoan

Pour Laravel 5.5, le code suivant fonctionnait pour moi en mettant à jour uniquement LoginController.php

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


protected function authenticated(Request $request, $user)
{
    return redirect(session('link'));
}
11
Hasan AbdulRahim

Pour Laravel 5.3

dans App/Http/Controllers/Auth/LoginController ajoutez cette ligne à la fonction __construct()

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

Donc le code complet sera

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

Cela fonctionne comme un charme pour moi j'utilise laravel 5.3.30

10

Pour Laravel 5.4, le code suivant fonctionnait pour moi en mettant à jour uniquement 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;
}
5
vipin

Regardez dans laravel cheat sheet

et utilise:

URL::previous();

pour aller à la page précédente.

5
Loko

Redirection pour vous connecter avec l'URL de la page actuelle sous forme de chaîne de requête:

<a href="{{ url('login?redirect_to=' . urlencode(request()->url())) }}">login</a>

Dans votre LoginController, vérifiez s'il existe et enregistrez la chaîne de requête en session, puis redirigez-le vers l'URL après la connexion.

public function __construct() {
        parent::__construct();
        if ( \request()->get( 'redirect_to' ) ) {
            session()->put( 'redirect.url', \request()->get( 'redirect_to' ) );
        }
        $this->middleware( 'guest' )->except( 'logout' );
}

protected function authenticated(Request $request, $user) {
        if(session()->has('redirect.url') {
             return redirect( session()->get( 'redirect.url' ) );
        }
}
3
George Tudor

Laravel 5.6, Lorsque l’utilisateur insère de mauvaises références, la page de connexion sera rechargée et la session (['link' => url () -> previous ()]); prendra l'URL de connexion dans la variable de lien. Ainsi, l’utilisateur redirigera vers une page de connexion ou vers/home si la connexion aboutit. Donc, pour éviter que ces codes ci-dessous ne fonctionnent pour moi! Après cela, peu importe combien de temps l'utilisateur insère des informations d'identification erronées, il les redirigera après la connexion, exactement là où il se trouvait avant la page de connexion.

Mettre à jour ou écraser la fonction publique showLoginForm () dans LoginController.

public function showLoginForm()
{
    if (session('link')) {
        $myPath     = session('link');
        $loginPath  = url('/login');
        $previous   = url()->previous();

        if ($previous = $loginPath) {
            session(['link' => $myPath]);
        }
        else{
            session(['link' => $previous]);
        }
    }
    else{
         session(['link' => url()->previous()]);
    }

    return view('auth.login');
}

En outre, la fonction protégée Update ou Overwrite authentifiée (Request $ request, $ user) dans LoginController.

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

dans votre RedirectIfAuthenticated.php changer ce code 

public function handle($request, Closure $next, $guard = null)
    {
        if (Auth::guard($guard)->check()) {
            return redirect()->intended('/contactus');
        }

        return $next($request);
    }

s'il vous plaît noter à:

return redirect()->intended('/contactus');

ajoutez ceci à LoginController:

protected function redirectTo(){
    return url()->previous();
}

Remarque: si présent le champ $redirectTo, le supprimer

0
Luca C.