Para o Laravel 5.3 e superior
Verifique a resposta de Scott abaixo.
Para o Laravel 5 até 5.2
Simplificando,
No middleware de autenticação:
// redirect the user to "/login"
// and stores the url being accessed on session
if (Auth::guest()) {
return redirect()->guest('login');
}
return $next($request);
Na ação de login:
// 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 o Laravel 4 (resposta antiga)
No momento desta resposta, não havia suporte oficial da própria estrutura. Hoje em dia você pode usaro método indicado por bgdrl abaixoeste método: (tentei atualizar sua resposta, mas parece que ele não aceitará)
No filtro de autenticação:
// redirect the user to "/login"
// and stores the url being accessed on session
Route::filter('auth', function() {
if (Auth::guest()) {
return Redirect::guest('login');
}
});
Na ação de login:
// 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 o Laravel 3 (resposta ainda mais antiga)
Você poderia implementá-lo assim:
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();
}
Armazenar o redirecionamento na Sessão tem o benefício de persistir, mesmo que o usuário tenha digitado suas credenciais ou ele não tenha uma conta e precise se inscrever.
Isso também permite que qualquer outra coisa além de Auth defina um redirecionamento na sessão e funcionará magicamente.
Laravel> = 5.3
As alterações de autenticação na versão 5.3 tornam a implementação um pouco mais fácil e um pouco diferente da 5.2, desde que o Auth Middleware foi movido para o contêiner de serviço.
Modifique o novo redirecionador de autenticação Middleware
Altere a função do identificador levemente, para que fique assim:
Explicação TL; DR
A única diferença está na quarta linha; por padrão, fica assim:
Como o Laravel> = 5.3 salva automaticamente a última rota "pretendida" ao verificar o Auth Guard, ele muda para:
Isso diz ao Laravel para redirecionar para a última página pretendida antes do login, caso contrário, vá para "/ home" ou para onde você quiser enviá-los por padrão.
Espero que isso ajude outra pessoa - não há muito por aí sobre as diferenças entre 5.2 e 5.3, e nessa área em particular, existem algumas.
fonte
return redirect()->intended(RouteServiceProvider::HOME);
para manter o caminho da sua casa em um só lugar.Eu encontrei esses dois ótimos métodos que podem ser extremamente úteis para você.
Você pode aplicar esse filtro às rotas que precisam de autenticação.
O que esse método basicamente faz é armazenar a página que você estava tentando visitar e redirecioná-lo para a página de login .
Quando o usuário é autenticado, você pode ligar
e ele o redireciona para a página que você estava tentando acessar primeiro.
É uma ótima maneira de fazer isso, embora eu normalmente use o método abaixo.
Você pode conferir este blog incrível.
fonte
Você pode usar a função Redirect :: intencionada . Ele redirecionará o usuário para o URL que eles estavam tentando acessar antes de serem capturados pelo filtro de autenticação. Um URI de fallback pode ser fornecido para esse método, caso o destino pretendido não esteja disponível.
No pós-login / registro:
fonte
Eu tenho usado isso por um tempo no meu código seletor de idioma. Contanto que você só precise voltar em apenas 1 página, funciona bem:
Não é a solução mais poderosa disponível, mas é super fácil e pode ajudar a resolver alguns quebra-cabeças. :)
fonte
Altere o construtor LoginControllers para:
Ele o redirecionará de volta para a página ANTES da página de login (2 páginas atrás).
fonte
isso o redirecionará para a página padrão do seu projeto, ou seja, a página inicial.
fonte
Para o laravel 5. * tente estes.
ou
fonte
Laravel 3
Alterei um pouco o seu código (Vinícius Fragoso Pinheiro) e coloquei o seguinte em filters.php
E então dentro do meu AuthController.php:
Observe que os
'redirect'
dados da sessão são atualizados novamente se houver um problema de autenticação. Isso mantém o redirecionamento intacto durante qualquer problema no logon, mas se o usuário clicar a qualquer momento, o próximo processo de logon não será interrompido pelos dados da sessão.Você também precisa atualizar novamente os dados no momento de mostrar o formulário de login no seu
AuthController
, caso contrário, a cadeia será interrompida:fonte
Usar
Redirect;
Então use isto:
fonte
Para o Laravel 5.5 e provavelmente 5.4
Em App \ Http \ Middleware \ RedirectIfAuthenticated, altere
redirect('/home')
pararedirect()->intended('/home')
na função de identificador:em App \ Http \ Controllers \ Auth \ LoginController, crie a
showLoginForm()
função da seguinte maneira:Dessa forma, se houver uma intenção para outra página, ela será redirecionada para lá, caso contrário, será redirecionada para casa.
fonte
Estou usando a seguinte abordagem com um controlador de login personalizado e middleware para o Laravel 5.7, mas espero que funcione em qualquer uma das versões do laravel 5
dentro do middleware
método de login do controlador interno
Se você precisar passar o URL pretendido para o lado do cliente , tente o seguinte
fonte
Primeiro, você deve saber como redirecionar o usuário para a rota de 'login':
Assim não:
fonte
O Laravel agora suporta esse recurso pronto para uso! (Acredito desde 5.5 ou anterior).
Adicione um
__construct()
método ao seuController
como mostrado abaixo:Após o login, seus usuários serão redirecionados para a página que pretendiam visitar inicialmente.
Você também pode adicionar o recurso de verificação de email do Laravel, conforme exigido pela lógica da sua aplicação:
A documentação contém um exemplo muito breve:
Também é possível escolher a quais métodos do controlador o middleware se aplica usando
except
ouonly
options.Exemplo com
except
:Exemplo com
only
:Mais informações sobre
except
eonly
opções de middleware:fonte
se você estiver usando axios ou outra biblioteca javascript AJAX, poderá recuperar o URL e passar para o front end
você pode fazer isso com o código abaixo
Isso retornará uma string formatada em json
fonte
No Laravel 5.8
em App \ Http \ Controllers \ Auth \ LoginController, adicione o seguinte método
em App \ Http \ Middleware \ RedirectIfAuthenticated, substitua "return redirect ('/ home');" pelo seguinte
fonte
Você tentou isso no seu routes.php?
fonte
fonte
Aqui está a minha solução para o 5.1. Eu precisava de alguém para clicar no botão "Curtir" em uma postagem, ser redirecionado para o login e retornar à página original. Se eles já estavam logados, o
href
botão "Curtir" foi interceptado com JavaScript e transformado em uma solicitação AJAX.O botão é algo parecido
<a href="https://stackoverflow.com/like/931">Like This Post!</a>
./like/931
é tratado por um LikeController que requer oauth
middleware.No middleware Authenticate (a
handle()
função), adicione algo assim no início:Altere
/auth/login
para o URL desejado para fazer login. Esse código salva o URL da página original na sessão, a menos que o URL seja o URL de login. Isso é necessário porque parece que esse middleware foi chamado duas vezes. Não sei por que ou se isso é verdade. Mas se você não verificar essa condicional, ela será igual à página original correta e, de alguma forma, será alterada/auth/login
. Provavelmente existe uma maneira mais elegante de fazer isso.Em seguida, no
LikeController
controlador ou em qualquer controlador que você lida com o URL do botão pressionado na página original:Este método é super simples, não requer a substituição de nenhuma função existente e funciona muito bem. É possível que haja alguma maneira mais fácil para o Laravel fazer isso, mas não tenho certeza do que seja. Usar a
intended()
função não funciona no meu caso, porque o LikeController também precisava saber qual era o URL anterior para redirecioná-lo novamente. Essencialmente dois níveis de redirecionamento para trás.fonte
Para o Laravel 5.2 (versões anteriores não usei)
Cole o código no arquivo app \ Http \ Controllers \ Auth \ AurhController.php
E importe o namespace:
use Session;
Se você não fez nenhuma alteração no arquivo app \ Http \ Controllers \ Auth \ AurhController.php, basta substituí-lo pelo arquivo do GitHub
fonte
Laravel 5.2
Se você estiver usando outro Middleware como o Middleware Admin, poderá definir uma sessão para url.intended usando o seguinte:
Basicamente, precisamos definir manualmente o
\Session::put('url.intended', \URL::full());
redirecionamento.Exemplo
Na tentativa de login
Certifique-se de que na tentativa de login use
return \Redirect::intended('default_path');
fonte
redirect()->guest('login')
é para.O Larvel 5.3 realmente funcionou para mim, apenas atualizando o LoginController.php
ref: https://laracasts.com/discuss/channels/laravel/redirect-to-previous-page-after-login
fonte
Para o Laravle 5.7, você precisa fazer alterações em:
Mude isso:
Para isso:
fonte
mypath
? (Usuário passar para voltar a esta)