Как перенаправить пользователя на предыдущий URL-адрес после регистрации в Laravel

Используя встроенную систему аутентификации в Laravel 5.6, у меня есть несколько страниц на моем веб-сайте, где мне нужен пользователь для регистрации или входа в систему для выполнения таких действий, как покупка и т. д.

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

Пример того, что я ищу:

  1. Пользователь нажимает «Зарегистрироваться» со страницы X.
  2. Пользователь переходит на страницу регистрации
  3. Затем пользователь перенаправляется обратно на страницу X вместо домашней страницы.
  4. Пользователь всегда перенаправляется обратно на страницу, на которой он находился ранее.

Вот мой RegisterController.php:

//protected $redirectTo = '/'; (Originally Returning Back To Home)

//WHAT I'M USING NOW TO TRY AND REDIRECT BACK TO PREVIOUS PAGE

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

// Guards/Redirects user to home if logged in and tries to access register page again.

    public function __construct()
    {
        $this->middleware('guest');
    } 


// If users email exists in my transaction database, I show them a Thank you message upon registering. And Still want to redirect them back to previous page.

    public function registered($request, $user) {
        $where = [
            ['customer_email', $user->email],
            ['user_id', null],
        ];

        if (Transaction::where($where)->exists()) {
            Transaction::where($where)->update(['user_id' => $user->id]);

            return url()->previous()
                ->with('success', 'Thank you for your previous transaction! Go to your Profile to review your transaction history.');
        }
    }

Вот как я заставил это работать с контроллером входа в систему, но не работал с контроллером регистрации.

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

protected function authenticated(Request $request, $user)
{
    return redirect(session('link'));      
}

Любая помощь будет оценена по достоинству.

Ссылка, которую вы назвали дубликатом, — это то, что я использовал, чтобы правильно перенаправить вход на предыдущую страницу. Я спрашиваю, как бы я сделал то же самое для пользователей после регистрации.

daugaard47 08.04.2019 19:58

Является ли страница X просто просмотром? Вы передаете ему какие-либо данные?

FullStackOfPancakes 08.04.2019 20:14

Итак, из того, что вы сказали, пользователь находится на /page1, затем переходит в /register, заполняет регистрацию и отправляет. Если регистрация прошла успешно, вы хотите, чтобы они вернулись на /page1?

ColinMD 08.04.2019 20:27

@ColinMD да, это правильно. С какой бы страницы пользователь ни обращался к странице регистрации, я бы хотел, чтобы они тоже вернулись.

daugaard47 08.04.2019 20:35

@UkraineInTheMembrane Да, страница X — это просто вид. Пример представления/страницы «О нас». Я передаю данные на большинство своих страниц через базу данных и циклы foreach.

daugaard47 08.04.2019 20:38
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
5
1 736
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Итак, вы можете сделать это аналогично вашему контроллеру входа в систему.

Сначала вам нужно создать приведенную ниже функцию в вашем контроллере регистрации, чтобы переопределить значение по умолчанию и сохранить URL-адрес в сеансе.

/**
* Show the application registration form.
*
* @return \Illuminate\Http\Response
*/
public function showRegistrationForm()
{
    if (session('link')) {
        $myPath     = session('link');
        $registerPath  = url('/register');
        $previous   = url()->previous();

        if ($previous = $registerPath) {
            session(['link' => $myPath]);
        }else{
            session(['link' => $previous]);
        }
    } else{
        session(['link' => url()->previous()]);
    }
    return view('auth.register');
}

Затем снова создайте следующую функцию в контроллере регистрации.

protected function redirectTo()
{
    return redirect(session('link'))->with('success', 'Thank you for your previous transaction! Go to your Profile to review your transaction history.');
}

Вы также можете установить маршрут по умолчанию на случай, если они получат прямой доступ к форме регистрации. Так

protected function redirectTo()
{
    if (session('link')){
        return redirect(session('link'))->with('success', 'Thank you for your previous transaction! Go to your Profile to review your transaction history.');
    }
    return redirect('/home')->with('success', 'Thank you for your previous transaction! Go to your Profile to review your transaction history.');
}

Нет проблем, рад, что смог помочь

ColinMD 09.04.2019 21:45

Привет, ColinMd, я использую точно такой же код, и у меня возникает эта ошибка, когда я отправляю форму регистрации. Заголовок ErrorException не может содержать более одного заголовка, обнаружена новая строка Есть идеи, почему? Спасибо

djoo 12.12.2019 15:28

Выяснилось, что вы не можете использовать перенаправление в функции redirectTo(), вы можете сделать return 'home';

djoo 12.12.2019 16:19

Другие вопросы по теме