Pour Laravel 5.3 et supérieur
Vérifiez la réponse de Scott ci-dessous.
Pour Laravel 5 jusqu'à 5,2
Tout simplement,
Sur le middleware d'authentification:
// redirect the user to "/login"
// and stores the url being accessed on session
if (Auth::guest()) {
return redirect()->guest('login');
}
return $next($request);
Lors de l'action de connexion:
// redirect the user back to the intended page
// or defaultpage if there isn't one
if (Auth::attempt(['email' => $email, 'password' => $password])) {
return redirect()->intended('defaultpage');
}
Pour Laravel 4 (ancienne réponse)
Au moment de cette réponse, il n'y avait aucun soutien officiel du cadre lui-même. De nos jours, vous pouvez utiliserla méthode indiquée par bgdrl ci-dessouscette méthode: (j'ai essayé de mettre à jour sa réponse, mais il semble qu'il n'acceptera pas)
Sur le filtre d'authentification:
// redirect the user to "/login"
// and stores the url being accessed on session
Route::filter('auth', function() {
if (Auth::guest()) {
return Redirect::guest('login');
}
});
Lors de l'action de connexion:
// redirect the user back to the intended page
// or defaultpage if there isn't one
if (Auth::attempt(['email' => $email, 'password' => $password])) {
return Redirect::intended('defaultpage');
}
Pour Laravel 3 (réponse encore plus ancienne)
Vous pouvez l'implémenter comme ceci:
Route::filter('auth', function() {
// If there's no user authenticated session
if (Auth::guest()) {
// Stores current url on session and redirect to login page
Session::put('redirect', URL::full());
return Redirect::to('/login');
}
if ($redirect = Session::get('redirect')) {
Session::forget('redirect');
return Redirect::to($redirect);
}
});
// on controller
public function get_login()
{
$this->layout->nest('content', 'auth.login');
}
public function post_login()
{
$credentials = [
'username' => Input::get('email'),
'password' => Input::get('password')
];
if (Auth::attempt($credentials)) {
return Redirect::to('logged_in_homepage_here');
}
return Redirect::to('login')->with_input();
}
Le stockage de la redirection sur Session a l'avantage de la conserver même si l'utilisateur n'a pas tapé ses informations d'identification ou s'il n'a pas de compte et doit s'inscrire.
Cela permet également à tout autre chose que Auth de définir une redirection en session et cela fonctionnera comme par magie.
Laravel> = 5,3
Les modifications d'Auth dans 5.3 rendent l'implémentation de ceci un peu plus facile, et légèrement différente de 5.2 puisque le middleware d'Auth a été déplacé vers le conteneur de service.
Modifier le nouveau redirecteur d'authentification Middleware
Modifiez légèrement la fonction de la poignée pour qu'elle ressemble à:
TL; DR explication
La seule différence est dans la 4ème ligne; par défaut, cela ressemble à ceci:
Puisque Laravel> = 5.3 enregistre automatiquement la dernière route "prévue" lors de la vérification de l'Auth Guard, il se transforme en:
Cela indique à Laravel de rediriger vers la dernière page prévue avant la connexion, sinon allez dans "/ home" ou à l'endroit où vous souhaitez les envoyer par défaut.
J'espère que cela aide quelqu'un d'autre - il n'y a pas grand-chose sur les différences entre 5.2 et 5.3, et dans ce domaine en particulier, il y en a pas mal.
la source
return redirect()->intended(RouteServiceProvider::HOME);
pour garder votre chemin d'accès à la maison au même endroit.J'ai trouvé ces deux excellentes méthodes qui pourraient vous être extrêmement utiles.
Vous pouvez appliquer ce filtre aux routes qui nécessitent une authentification.
Cette méthode sert essentiellement à stocker la page que vous tentiez de visiter et elle vous redirige vers la page de connexion .
Lorsque l'utilisateur est authentifié, vous pouvez appeler
et il vous redirige vers la page que vous tentiez d'accéder au début.
C'est un excellent moyen de le faire bien que j'utilise généralement la méthode ci-dessous.
Vous pouvez consulter ce blog génial.
la source
Vous pouvez utiliser la fonction Redirect :: prévue . Il redirigera l'utilisateur vers l'URL auquel il essayait d'accéder avant d'être intercepté par le filtre d'authentification. Un URI de secours peut être donné à cette méthode au cas où la destination prévue n'est pas disponible.
En post connexion / inscription:
la source
J'utilise ceci depuis un moment sur mon code de sélection de langue. Tant que vous n'avez besoin de revenir en arrière que d'une page, cela fonctionne bien:
Ce n'est pas la solution la plus puissante du marché, mais elle est très simple et peut aider à résoudre quelques énigmes. :)
la source
Modifiez votre constructeur LoginControllers en:
Il vous redirigera vers la page AVANT la page de connexion (2 pages en arrière).
la source
cela vous redirigera vers la page par défaut de votre projet, c'est-à-dire la page de démarrage.
la source
Pour laravel 5. * essayez-les.
ou
la source
Laravel 3
J'ai légèrement modifié votre code (Vinícius Fragoso Pinheiro) et placé ce qui suit dans filters.php
Et puis dans le my AuthController.php:
Notez que les
'redirect'
données de session sont reflétées s'il y a un problème d'authentification. Cela permet de garder la redirection intacte pendant tout incident de connexion, mais si l'utilisateur clique à tout moment, le processus de connexion suivant n'est pas perturbé par les données de session.Vous devez également reflasher les données au moment d'afficher le formulaire de connexion dans votre
AuthController
, sinon la chaîne est rompue:la source
Utilisation
Redirect;
Ensuite, utilisez ceci:
la source
Larvel 5.3 cela a fonctionné pour moi en mettant simplement à jour LoginController.php
réf: https://laracasts.com/discuss/channels/laravel/redirect-to-previous-page-after-login
la source
Pour Laravel 5.5 et probablement 5.4
Dans App \ Http \ Middleware \ RedirectIfAuthenticated changement
redirect('/home')
àredirect()->intended('/home')
la fonction de poignée:dans App \ Http \ Controllers \ Auth \ LoginController, créez la
showLoginForm()
fonction comme suit:De cette façon, s'il y avait une intention pour une autre page, elle s'y redirigera sinon elle redirigera vers la maison.
la source
J'utilise l'approche suivante avec un contrôleur de connexion personnalisé et un middleware pour Laravel 5.7, mais j'espère que cela fonctionne dans l'une des versions de laravel 5
à l'intérieur du middleware
à l'intérieur de la méthode de connexion du contrôleur
Si vous devez transmettre l'URL intentionnelle côté client , vous pouvez essayer ce qui suit
la source
Tout d'abord, vous devez savoir comment vous redirigez l'utilisateur vers la route de `` connexion '':
Pas comme ça:
la source
Laravel prend désormais en charge cette fonctionnalité prête à l'emploi! (Je crois depuis 5.5 ou plus tôt).
Ajoutez une
__construct()
méthode à votreController
comme indiqué ci-dessous:Après la connexion, vos utilisateurs seront alors redirigés vers la page qu'ils avaient l'intention de visiter initialement.
Vous pouvez également ajouter la fonction de vérification des e-mails de Laravel selon les besoins de votre logique d'application:
La documentation contient un très bref exemple:
Il est également possible de choisir les méthodes de contrôleur auxquelles le middleware s'applique en utilisant les options
except
ouonly
.Exemple avec
except
:Exemple avec
only
:Plus d'informations sur
except
etonly
les options middleware:la source
si vous utilisez axios ou une autre bibliothèque javascript AJAX, vous souhaiterez peut-être récupérer l'url et la transmettre au frontal
vous pouvez le faire avec le code ci-dessous
Cela renverra une chaîne au format json
la source
Dans Laravel 5.8
dans App \ Http \ Controllers \ Auth \ LoginController, ajoutez la méthode suivante
dans App \ Http \ Middleware \ RedirectIfAuthenticated, remplacez "return redirect ('/ home');" par ce qui suit
la source
Avez-vous essayé cela dans votre routes.php?
la source
la source
Voici ma solution pour 5.1. J'avais besoin que quelqu'un clique sur un bouton «J'aime» sur un message, soit redirigé vers la connexion, puis revienne à la page d'origine. S'ils étaient déjà connectés, le
href
bouton "J'aime" a été intercepté avec JavaScript et transformé en requête AJAX.Le bouton est quelque chose comme
<a href="https://stackoverflow.com/like/931">Like This Post!</a>
./like/931
est géré par un LikeController qui nécessite leauth
middleware.Dans le middleware Authenticate (la
handle()
fonction), ajoutez quelque chose comme ceci au début:Modifiez
/auth/login
votre URL pour vous connecter. Ce code enregistre l'URL de la page d'origine dans la session, sauf si l'URL est l'URL de connexion. Ceci est nécessaire car il semble que ce middleware soit appelé deux fois. Je ne sais pas pourquoi ni si c'est vrai. Mais si vous ne vérifiez pas ce conditionnel, il sera égal à la page d'origine correcte, puis sera changé d'une manière ou d'une autre/auth/login
. Il existe probablement une manière plus élégante de le faire.Ensuite, dans le
LikeController
contrôleur ou tout autre contrôleur que vous avez qui gère l'URL du bouton enfoncé sur la page d'origine:Cette méthode est super simple, ne nécessite pas de remplacer les fonctions existantes et fonctionne très bien. Il est possible qu'il existe un moyen plus simple pour Laravel de le faire, mais je ne suis pas sûr de ce que c'est. L'utilisation de la
intended()
fonction ne fonctionne pas dans mon cas car le LikeController devait également savoir quelle était l'URL précédente pour y rediriger. Essentiellement deux niveaux de redirection vers l'arrière.la source
Pour Laravel 5.2 (versions précédentes que je n'ai pas utilisées)
Collez le code dans le fichier app \ Http \ Controllers \ Auth \ AurhController.php
Et importez l'espace de noms:
use Session;
Si vous n'avez apporté aucune modification au fichier app \ Http \ Controllers \ Auth \ AurhController.php, vous pouvez simplement le remplacer par le fichier du GitHub
la source
Laravel 5.2
Si vous utilisez un autre middleware tel que le middleware Admin, vous pouvez définir une session pour url.intended en utilisant ce qui suit:
Fondamentalement, nous devons définir manuellement
\Session::put('url.intended', \URL::full());
redirection.Exemple
Lors de la tentative de connexion
Assurez-vous que lors de la tentative de connexion, utilisez
return \Redirect::intended('default_path');
la source
redirect()->guest('login')
sert.Pour Laravle 5.7, vous devez modifier:
Change ça:
Pour ça:
la source
mypath
? (pass utilisateur pour revenir à cela)