Для Laravel 5.3 и выше
Проверьте ответ Скотта ниже.
Для Laravel 5 до 5,2
Проще говоря,
На промежуточном ПО аутентификации:
// redirect the user to "/login"
// and stores the url being accessed on session
if (Auth::guest()) {
return redirect()->guest('login');
}
return $next($request);
При входе в систему:
// 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');
}
Для Laravel 4 (старый ответ)
На момент этого ответа не было официальной поддержки со стороны самой структуры. В настоящее время вы можете использоватьметод, указанный bgdrl нижеэтот метод: (Я пытался обновить его ответ, но, похоже, он не примет)
На фильтр авторизации:
// redirect the user to "/login"
// and stores the url being accessed on session
Route::filter('auth', function() {
if (Auth::guest()) {
return Redirect::guest('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');
}
Для Laravel 3 (даже более старый ответ)
Вы можете реализовать это так:
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();
}
Сохранение перенаправления в сеансе имеет преимущество сохранения его, даже если пользователь пропустил ввод своих учетных данных или у него нет учетной записи и он должен зарегистрироваться.
Это также позволяет чему-либо еще, кроме Auth, устанавливать перенаправление на сеанс, и это будет работать магическим образом.
Laravel> = 5.3
Изменения Auth в 5.3 делают его реализацию немного проще и немного отличаются от 5.2, поскольку промежуточное программное обеспечение Auth было перемещено в сервисный контейнер.
Изменить новый перенаправитель авторизации Middleware
Немного измените функцию дескриптора, чтобы она выглядела следующим образом:
TL; DR объяснение
Единственная разница в 4-й строке; по умолчанию это выглядит так:
Поскольку Laravel> = 5.3 автоматически сохраняет последний «намеченный» маршрут при проверке Auth Guard, он изменяется на:
Это говорит Laravel перенаправить на последнюю намеченную страницу перед входом в систему, в противном случае перейдите в «/ home» или куда вы хотите отправить их по умолчанию.
Надеюсь, что это поможет кому-то еще - не так много различий между 5.2 и 5.3, и в этой области, в частности, немало.
источник
return redirect()->intended(RouteServiceProvider::HOME);
чтобы сохранить ваш домашний путь в одном месте.Я нашел эти два замечательных метода, которые могут быть чрезвычайно полезны для вас.
Вы можете применить этот фильтр к маршрутам, которые требуют аутентификации.
Этот метод в основном делает для хранения страницы, которую вы пытались посетить, и он перенаправляет вас на страницу входа .
Когда пользователь аутентифицирован, вы можете позвонить
и он перенаправляет вас на страницу, которую вы пытались открыть вначале.
Это отличный способ сделать это, хотя я обычно использую метод ниже.
Вы можете проверить этот удивительный блог.
источник
Вы можете использовать функцию Redirect:. Он перенаправит пользователя на URL-адрес, к которому он пытался получить доступ, прежде чем его перехватит фильтр аутентификации. Этому методу может быть предоставлен резервный URI, если предполагаемое назначение недоступно.
В посте логин / регистрация:
источник
Я использовал это некоторое время на моем коде выбора языка. Пока вам нужно вернуться только на 1 страницу, она работает нормально:
Это не самое мощное решение, но оно очень простое и может помочь решить несколько головоломок. :)
источник
Измените конструктор LoginControllers на:
Он перенаправит вас обратно на страницу ДО страницы входа (2 страницы назад).
источник
это перенаправит вас на страницу по умолчанию вашего проекта, т.е. на стартовую страницу.
источник
Для Laravel 5. * попробуйте это.
или
источник
Ларавел 3
Я немного подправил твой код (Vinícius Fragoso Pinheiro) и поместил следующее в filters.php
А затем в моем AuthController.php:
Обратите внимание, что
'redirect'
данные сеанса перепрошиваются, если есть проблема аутентификации. Это сохраняет перенаправление без изменений во время любых неудачных попыток входа в систему, но если пользователь щелкнет в любой момент, следующий процесс входа не будет прерван данными сеанса.Вам также необходимо перепрошить данные в момент отображения формы входа в систему, в
AuthController
противном случае цепочка разорвана:источник
использование
Redirect;
Тогда используйте это:
источник
Larvel 5.3 это на самом деле работает для меня, просто обновив LoginController.php
ссылка: https://laracasts.com/discuss/channels/laravel/redirect-to-previous-page-after-login
источник
Для Laravel 5.5 и, вероятно, 5.4
В App \ Http \ Middleware \ RedirectIfAuthenticated измените
redirect('/home')
наredirect()->intended('/home')
в функции дескриптора:в App \ Http \ Controllers \ Auth \ LoginController создайте
showLoginForm()
функцию следующим образом:Таким образом, если было намерение для другой страницы, он будет перенаправлять туда, иначе он будет перенаправлять домой.
источник
Я использую следующий подход с пользовательским контроллером входа и промежуточным программным обеспечением для Laravel 5.7, но я надеюсь, что это работает в любой из версий laravel 5
в промежуточном программном обеспечении
метод входа внутри контроллера
Если вам нужно передать намеренный URL-адрес на стороне клиента , вы можете попробовать следующее
источник
Во-первых, вы должны знать, как вы перенаправляете пользователя на маршрут входа в систему:
Не так:
источник
Laravel теперь поддерживает эту функцию "из коробки"! (Я верю с 5.5 или ранее).
Добавьте
__construct()
метод к себе,Controller
как показано ниже:После входа ваши пользователи будут перенаправлены на страницу, которую они изначально хотели посетить.
Вы также можете добавить функцию проверки электронной почты Laravel, как того требует логика вашего приложения:
Документация содержит очень краткий пример:
Также можно выбрать методы контроллера, к которым применяется промежуточное программное обеспечение, с помощью
except
илиonly
параметров.Пример с
except
:Пример с
only
:Больше информации
except
иonly
опций промежуточного программного обеспечения:источник
Если вы используете Axios или другую библиотеку JavaScript AJAX, вы можете получить URL-адрес и перейти к интерфейсу
Вы можете сделать это с помощью кода ниже
Это вернет строку в формате json
источник
В Ларавеле 5,8
в App \ Http \ Controllers \ Auth \ LoginController добавьте следующий метод
в App \ Http \ Middleware \ RedirectIfAuthenticated замените «возвратный редирект ('/ home');» следующим
источник
Вы пробовали это в вашем rout.php?
источник
источник
Вот мое решение для 5.1. Мне нужно было, чтобы кто-то нажал кнопку «Мне нравится» в сообщении, перенаправился на страницу входа и вернулся на исходную страницу. Если они уже вошли в систему,
href
кнопка «Мне нравится» была перехвачена с помощью JavaScript и превращена в запрос AJAX.Кнопка что-то вроде
<a href="https://stackoverflow.com/like/931">Like This Post!</a>
./like/931
обрабатывается LikeController, который требуетauth
промежуточного программного обеспечения.В промежуточном программном обеспечении Authenticate (
handle()
функция) добавьте что-то вроде этого в начале:Измените
/auth/login
любой URL-адрес для входа в систему. Этот код сохраняет URL-адрес исходной страницы в сеансе, если только URL-адрес не является URL-адресом для входа. Это необходимо, потому что кажется, что это промежуточное программное обеспечение вызывается дважды. Я не уверен, почему или если это правда. Но если вы не проверяете это условие, оно будет равно правильной исходной странице, а затем как-то получится/auth/login
. Вероятно, есть более элегантный способ сделать это.Затем в
LikeController
контроллере или в любом другом имеющемся контроллере, который обрабатывает URL для кнопки, нажатой на исходной странице:Этот метод очень прост, не требует переопределения существующих функций и отлично работает. Возможно, для Ларавела есть более простой способ сделать это, но я не уверен, что это такое. Использование
intended()
функции не работает в моем случае, потому что LikeController нужно было также знать, какой предыдущий URL был перенаправлен обратно на него. По существу два уровня перенаправления назад.источник
Для Laravel 5.2 (предыдущие версии я не использовал)
Вставьте код в файл app \ Http \ Controllers \ Auth \ AurhController.php
И импортировать пространство имен:
use Session;
Если вы не внесли никаких изменений в файл app \ Http \ Controllers \ Auth \ AurhController.php, вы можете просто заменить его файлом из GitHub.
источник
Laravel 5.2
Если вы используете другое промежуточное ПО, такое как промежуточное ПО администратора, вы можете установить сеанс для url.intended , используя следующее:
В основном нам нужно установить вручную
\Session::put('url.intended', \URL::full());
для перенаправления.пример
При попытке входа
Убедитесь, что при входе в систему используется
return \Redirect::intended('default_path');
источник
redirect()->guest('login')
.Для Laravle 5.7 Вам необходимо внести изменения в:
Изменить это:
К этому:
источник
mypath
? (пользователь передает обратно к этому)