Ответ 1
В
приложение/Http/Контроллеры/Auth/AuthController.php
добавьте эту строку и измените '/' на ваше местоположение.
protected $redirectPath = '/';
У меня есть страница с некоторым контентом на ней и раздел комментариев. Комментарии могут оставляться только тем пользователям, которые вошли в систему, поэтому я добавил форму входа на страницу для входа в систему (это показывает только, если они еще не вошли в систему).
Проблема заключается в том, что когда пользователь подписывается, они перенаправляются обратно на главную страницу, а не на страницу, на которой они были ранее.
Я не изменил метод входа в систему из настройки из коробки.
Может ли кто-нибудь предложить простой способ установить URL-адрес перенаправления. Мои мысли состоят в том, что было бы неплохо установить его в форме.
В
приложение/Http/Контроллеры/Auth/AuthController.php
добавьте эту строку и измените '/' на ваше местоположение.
protected $redirectPath = '/';
Решение для laravel 5.3:
В loginController перезапишите функцию showLoginForm() следующим образом:
public function showLoginForm()
{
if(!session()->has('url.intended'))
{
session(['url.intended' => url()->previous()]);
}
return view('auth.login');
}
Он установит переменную сеанса "url.intended", то есть та, которую использует laravel для поиска страницы, которую вы хотите перенаправить после входа в систему, с предыдущим URL-адресом.
Он также проверяет, была ли установлена переменная, чтобы избежать изменения переменной с URL-адресом входа, если пользователь отправит форму с ошибкой.
Для Laravel 5.5 следующий код работал у меня, просто обновив LoginController.php
public function showLoginForm()
{
session(['link' => url()->previous()]);
return view('auth.login');
}
protected function authenticated(Request $request, $user)
{
return redirect(session('link'));
}
Используйте redirect()->intended()
вместо этого в Laravel 5.1
Вы также можете узнать об этом здесь: http://laravel.com/docs/5.1/authentication
Для Laravel 5.3
внутри App/Http/Controllers/Auth/LoginController
добавьте эту строку в функцию __construct()
$this->redirectTo = url()->previous();
Таким образом, полный код будет
public function __construct()
{
$this->redirectTo = url()->previous();
$this->middleware('guest', ['except' => 'logout']);
}
Он работает как шарм для меня, я использую laravel 5.3.30
Посмотрите на шпаргалку Laravel
и использовать:
URL::previous();
перейти на предыдущую страницу.
Для Laravel 5.4 следующий код работал у меня, просто обновив 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;
}
Laravel 5.6. Когда пользователь вставляет неправильные учетные данные, страница входа в систему будет перезагружена и сеанс (['link' => url() → previous()]); получит URL-адрес входа в ссылку. Таким образом, пользователь снова перенаправляется на страницу входа в систему или перенаправляет на /home, если вы пользуетесь им. Поэтому, чтобы избежать этого ниже кода, работающего на меня! После этого независимо от того, сколько времени пользователь вставляет неправильные учетные данные, он будет перенаправлять после входа в систему, где он был до страницы входа.
Обновите или перезапишите публичную функцию showLoginForm() в 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');
}
Кроме того, в LoginController включена функция проверки подлинности Update или Overwrite (Request $ request, $ user).
protected function authenticated(Request $request, $user)
{
return redirect(session('link'));
}
Перенаправить на логин с текущим URL-адресом страницы в качестве строки запроса:
<a href="{{ url('login?redirect_to=' . urlencode(request()->url())) }}">login</a>
В вашем LoginController проверьте, существует ли и сохраняет строку запроса в сеансе, а затем перенаправляйте URL-адрес после входа в систему
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' ) );
}
}
добавьте это в LoginController
:
protected function redirectTo(){
return url()->previous();
}
Примечание: если присутствует поле $redirectTo
, удалите его
в вашем RedirectIfAuthenticated.php измените этот код
public function handle($request, Closure $next, $guard = null)
{
if (Auth::guard($guard)->check()) {
return redirect()->intended('/contactus');
}
return $next($request);
}
пожалуйста, обратите внимание:
return redirect()->intended('/contactus');
Обновленный ответ для Laravel 5.4, 5.5, 5.6, 5.7 и 5.8
Если вы хотите перенаправить пользователя на определенный URL-адрес или страницу продукта, передайте значение перенаправления в маршрут входа в систему.
public function showLoginForm()
{
if(!session()->has('url.intended'))
{
session(['url.intended' => url(request('redirect') ? request('redirect') : '/')]);
}
}
Если вы хотите перенаправить пользователя на предыдущий URL, используйте приведенный ниже код
public function showLoginForm()
{
if(!session()->has('url.intended'))
{
session(['url.intended' => url()->previous();
}
}
Добавьте ниже указанный код в свой логинконтроллер
protected function authenticated(Request $request, $user) {
return redirect(session('url.intended'));
}
Вы можете использовать перенаправление с помощью Laravel 5:
<?php namespace App\Http\Controllers;
use Redirect;
class SomeController extends Controller {
public function some_method() {
return Redirect::back()
}
}
Использовать Thss
return Redirect:: back ('back-url')
В Laravel 5.7 это выглядит как поведение по умолчанию:
Предполагаемый метод перенаправителя перенаправит пользователя на URL-адрес, к которому он пытался получить доступ, прежде чем он будет перехвачен промежуточным программным обеспечением аутентификации. Резервный URI может быть предоставлен этому методу, если предполагаемый пункт назначения недоступен.
Более подробную информацию можно найти здесь: https://laravel.com/docs/5.7/authentication#authenticating-users