Используя встроенную систему аутентификации в Laravel 5.6, у меня есть несколько страниц на моем веб-сайте, где мне нужен пользователь для регистрации или входа в систему для выполнения таких действий, как покупка и т. д.
У меня есть мой логин, перенаправляющий обратно на предыдущую страницу, на которой пользователь был до входа в систему, но, похоже, не могу заставить это работать с регистрацией.
Пример того, что я ищу:
Вот мой 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'));
}
Любая помощь будет оценена по достоинству.
Является ли страница X просто просмотром? Вы передаете ему какие-либо данные?
Итак, из того, что вы сказали, пользователь находится на /page1, затем переходит в /register, заполняет регистрацию и отправляет. Если регистрация прошла успешно, вы хотите, чтобы они вернулись на /page1?
@ColinMD да, это правильно. С какой бы страницы пользователь ни обращался к странице регистрации, я бы хотел, чтобы они тоже вернулись.
@UkraineInTheMembrane Да, страница X — это просто вид. Пример представления/страницы «О нас». Я передаю данные на большинство своих страниц через базу данных и циклы foreach.
Итак, вы можете сделать это аналогично вашему контроллеру входа в систему.
Сначала вам нужно создать приведенную ниже функцию в вашем контроллере регистрации, чтобы переопределить значение по умолчанию и сохранить 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, я использую точно такой же код, и у меня возникает эта ошибка, когда я отправляю форму регистрации. Заголовок ErrorException не может содержать более одного заголовка, обнаружена новая строка Есть идеи, почему? Спасибо
Выяснилось, что вы не можете использовать перенаправление в функции redirectTo(), вы можете сделать return 'home';
Ссылка, которую вы назвали дубликатом, — это то, что я использовал, чтобы правильно перенаправить вход на предыдущую страницу. Я спрашиваю, как бы я сделал то же самое для пользователей после регистрации.