Laravel 5 - После переадресации имени пользователя на предыдущую страницу

У меня есть страница с некоторым контентом на ней и раздел комментариев. Комментарии могут оставляться только тем пользователям, которые вошли в систему, поэтому я добавил форму входа на страницу для входа в систему (это показывает только, если они еще не вошли в систему).

Проблема заключается в том, что когда пользователь подписывается, они перенаправляются обратно на главную страницу, а не на страницу, на которой они были ранее.

Я не изменил метод входа в систему из настройки из коробки.

Может ли кто-нибудь предложить простой способ установить URL-адрес перенаправления. Мои мысли состоят в том, что было бы неплохо установить его в форме.

Ответ 1

В

приложение/Http/Контроллеры/Auth/AuthController.php

добавьте эту строку и измените '/' на ваше местоположение.

protected $redirectPath = '/';

Ответ 2

Решение для 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-адресом входа, если пользователь отправит форму с ошибкой.

Ответ 3

Для 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'));
}

Ответ 4

Используйте redirect()->intended() вместо этого в Laravel 5.1

Вы также можете узнать об этом здесь: http://laravel.com/docs/5.1/authentication

Ответ 5

Для 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

Ответ 6

Посмотрите на шпаргалку Laravel

и использовать:

URL::previous();

перейти на предыдущую страницу.

Ответ 7

Для 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;
}

Ответ 8

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'));      
}

Ответ 9

Перенаправить на логин с текущим 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' ) );
        }
}

Ответ 10

добавьте это в LoginController:

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

Примечание: если присутствует поле $redirectTo, удалите его

Ответ 11

в вашем 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');

Ответ 12

Обновленный ответ для 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'));
}

Ответ 13

Вы можете использовать перенаправление с помощью Laravel 5:

<?php namespace App\Http\Controllers;

use Redirect;   
class SomeController extends Controller { 
    public function some_method() {
       return Redirect::back()
    }
}

Ответ 14

Использовать Thss

return Redirect:: back ('back-url')

Ответ 15

В Laravel 5.7 это выглядит как поведение по умолчанию:

Предполагаемый метод перенаправителя перенаправит пользователя на URL-адрес, к которому он пытался получить доступ, прежде чем он будет перехвачен промежуточным программным обеспечением аутентификации. Резервный URI может быть предоставлен этому методу, если предполагаемый пункт назначения недоступен.

Более подробную информацию можно найти здесь: https://laravel.com/docs/5.7/authentication#authenticating-users