Para Laravel 5.3 y superior
Verifique la respuesta de Scott a continuación.
Para Laravel 5 hasta 5.2
Simplemente pon,
En el middleware de autenticación:
// redirect the user to "/login"
// and stores the url being accessed on session
if (Auth::guest()) {
return redirect()->guest('login');
}
return $next($request);
En la acción de inicio de sesión:
// 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');
}
Para Laravel 4 (respuesta anterior)
En el momento de esta respuesta no había soporte oficial del marco en sí. Hoy en día puedes usarel método señalado por bgdrl a continuacióneste método: (he intentado actualizar su respuesta, pero parece que no aceptará)
En filtro de autenticación:
// redirect the user to "/login"
// and stores the url being accessed on session
Route::filter('auth', function() {
if (Auth::guest()) {
return Redirect::guest('login');
}
});
En la acción de inicio de sesión:
// 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');
}
Para Laravel 3 (respuesta incluso anterior)
Podrías implementarlo así:
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();
}
El almacenamiento de la redirección en la sesión tiene la ventaja de persistir incluso si el usuario omitió sus credenciales o no tiene una cuenta y tiene que registrarse.
Esto también permite que cualquier otra cosa además de Auth establezca una redirección en la sesión y funcionará mágicamente.
Laravel> = 5.3
Los cambios de Auth en 5.3 hacen que la implementación de esto sea un poco más fácil y ligeramente diferente de 5.2 ya que Auth Middleware se ha movido al contenedor de servicios.
Modifique el nuevo redirector de autenticación de middleware
Cambie la función del controlador ligeramente, de modo que se vea así:
TL; explicación DR
La única diferencia está en la 4ta línea; por defecto se ve así:
Dado que Laravel> = 5.3 guarda automáticamente la última ruta "prevista" al verificar Auth Guard, cambia a:
Eso le dice a Laravel que redirija a la última página deseada antes de iniciar sesión, de lo contrario vaya a "/ home" o donde desee enviarlos de forma predeterminada.
Espero que esto ayude a alguien más: no hay mucho sobre las diferencias entre 5.2 y 5.3, y en esta área en particular hay bastantes.
fuente
return redirect()->intended(RouteServiceProvider::HOME);
mantener tu camino a casa en un solo lugar.Encontré esos dos excelentes métodos que pueden ser extremadamente útiles para usted.
Puede aplicar este filtro a las rutas que necesitan autenticación.
Lo que básicamente hace este método es almacenar la página que intentaba visitar y lo redirige a la página de inicio de sesión .
Cuando el usuario se autentica, puede llamar
y te redirige a la página que estabas intentando alcanzar al principio.
Es una excelente manera de hacerlo, aunque generalmente uso el siguiente método.
Puedes consultar este increíble blog.
fuente
Puede usar Redirect :: función prevista . Redirigirá al usuario a la URL a la que intentaba acceder antes de ser detectado por el filtro de autenticación. Se puede dar un URI alternativo a este método en caso de que el destino previsto no esté disponible.
En post iniciar sesión / registrarse:
fuente
He estado usando esto por un tiempo en mi código de selector de idioma. Siempre que solo necesite retroceder solo 1 página, funciona bien:
No es la solución más poderosa que existe, pero es súper fácil y puede ayudar a resolver algunos acertijos. :)
fuente
Cambie su constructor LoginControllers a:
Le redirigirá a la página ANTES de la página de inicio de sesión (2 páginas atrás).
fuente
esto lo redirigirá a la página predeterminada de su proyecto, es decir, la página de inicio.
fuente
Para laravel 5. * prueba estos.
o
fuente
Laravel 3
Modifiqué un poco su código (Vinícius Fragoso Pinheiro) y coloqué lo siguiente en filtros.php
Y luego dentro de mi AuthController.php:
Tenga en cuenta que el
'redirect'
datos de sesión se actualizan si hay un problema de autenticación. Esto mantiene la redirección intacta durante cualquier contratiempo de inicio de sesión, pero si el usuario hace clic en cualquier punto, el siguiente proceso de inicio de sesión no se ve interrumpido por los datos de la sesión.También debe actualizar los datos en el punto de mostrar el formulario de inicio de sesión en su
AuthController
, de lo contrario, la cadena se rompe:fuente
Utilizar
Redirect;
Entonces usa esto:
fuente
Larvel 5.3 esto realmente funcionó para mí simplemente actualizando LoginController.php
ref: https://laracasts.com/discuss/channels/laravel/redirect-to-previous-page-after-login
fuente
Para Laravel 5.5 y probablemente 5.4
En App \ Http \ Middleware \ RedirectIfAuthenticated change
redirect('/home')
toredirect()->intended('/home')
en la función de manejo:en App \ Http \ Controllers \ Auth \ LoginController, cree la
showLoginForm()
función de la siguiente manera:De esta manera, si hubo una intención para otra página, se redirigirá allí; de lo contrario, se redirigirá a casa.
fuente
Estoy usando el siguiente enfoque con un controlador de inicio de sesión personalizado y middleware para Laravel 5.7, pero espero que funcione en cualquiera de las versiones de laravel 5
middleware interior
método de inicio de sesión del controlador interno
Si necesita pasar la URL deseada al lado del cliente , puede intentar lo siguiente
fuente
Primero, debe saber cómo redirige al usuario a la ruta de 'inicio de sesión':
Así no:
fuente
¡Laravel ahora es compatible con esta función lista para usar! (Creo que desde 5.5 o anterior).
Agregue un
__construct()
método a suController
como se muestra a continuación:Después de iniciar sesión, sus usuarios serán redirigidos a la página que pretendían visitar inicialmente.
También puede agregar la función de verificación de correo electrónico de Laravel según lo requiera la lógica de su aplicación:
La documentación contiene un ejemplo muy breve:
También es posible elegir a qué métodos de controlador se aplica el middleware usando
except
uonly
opciones.Ejemplo con
except
:Ejemplo con
only
:Más información sobre
except
yonly
opciones de middleware:fuente
si está utilizando axios u otra biblioteca AJAX javascript, puede que desee recuperar la url y pasar al front end
puedes hacerlo con el siguiente código
Esto devolverá una cadena con formato json
fuente
En Laravel 5.8
en App \ Http \ Controllers \ Auth \ LoginController agregue el siguiente método
en App \ Http \ Middleware \ RedirectIfAuthenticated reemplace "return redirect ('/ home');" con lo siguiente
fuente
¿Intentaste esto en tu route.php?
fuente
fuente
Aquí está mi solución para 5.1. Necesitaba que alguien haga clic en el botón "Me gusta" en una publicación, sea redirigido para iniciar sesión y luego regrese a la página original. Si ya habían iniciado sesión, el
href
botón "Me gusta" se interceptó con JavaScript y se convirtió en una solicitud AJAX.El botón es algo así
<a href="https://stackoverflow.com/like/931">Like This Post!</a>
./like/931
es manejado por un LikeController que requiereauth
middleware.En Authenticate middleware (la
handle()
función), agregue algo como esto al principio:Cambie
/auth/login
a la URL que sea para iniciar sesión. Este código guarda la URL de la página original en la sesión a menos que la URL sea la URL de inicio de sesión. Esto es obligatorio porque parece que este middleware se llama dos veces. No estoy seguro de por qué o si eso es cierto. Pero si no verifica ese condicional, será igual a la página original correcta y, de alguna manera, tendrá la oportunidad de/auth/login
. Probablemente haya una forma más elegante de hacer esto.Luego, en
LikeController
o en el controlador que tenga que maneje la URL del botón presionado en la página original:Este método es súper simple, no requiere anular ninguna función existente y funciona muy bien. Es posible que Laravel pueda hacer esto de una manera más fácil, pero no estoy seguro de qué es. Usar la
intended()
función no funciona en mi caso porque LikeController también necesitaba saber cuál era la URL anterior para redirigirla de nuevo. Esencialmente dos niveles de redireccionamiento hacia atrás.fuente
Para Laravel 5.2 (versiones anteriores que no usé)
Pegue el código en la aplicación de archivo \ Http \ Controllers \ Auth \ AurhController.php
E importar el espacio de nombres:
use Session;
Si no ha realizado ningún cambio en la aplicación de archivo \ Http \ Controllers \ Auth \ AurhController.php, puede reemplazarlo con el archivo de GitHub
fuente
Laravel 5.2
Si está utilizando otro Middleware como el middleware de Admin , puede configurar una sesión para url.intended usando lo siguiente:
Básicamente, necesitamos configurarlo manualmente
\Session::put('url.intended', \URL::full());
para la redirección.Ejemplo
En el intento de inicio de sesión
Asegúrese de utilizar el intento de inicio de sesión
return \Redirect::intended('default_path');
fuente
redirect()->guest('login')
es eso .Para Laravle 5.7, debe realizar el cambio en:
Cambia esto:
A esto:
fuente
mypath
? (pase de usuario para volver a esto)