Например, в Laravel есть механизм intended. Можно посмотреть как он устроен, и сделать нечто подобное.
Нас конечно же больше всего интересуют методы
guest
и
intended
класса
Illuminate\Routing\Redirector.
/**
* Create a new redirect response, while putting the current URL in the session.
*
* @param string $path
* @param int $status
* @param array $headers
* @param bool $secure
* @return \Illuminate\Http\RedirectResponse
*/
public function guest($path, $status = 302, $headers = [], $secure = null)
{
$this->session->put('url.intended', $this->generator->full());
return $this->to($path, $status, $headers, $secure);
}
/**
* Create a new redirect response to the previously intended location.
*
* @param string $default
* @param int $status
* @param array $headers
* @param bool $secure
* @return \Illuminate\Http\RedirectResponse
*/
public function intended($default = '/', $status = 302, $headers = [], $secure = null)
{
$path = $this->session->pull('url.intended', $default);
return $this->to($path, $status, $headers, $secure);
}
Как мы можем наблюдать, ни какой черной магии здесь не происходит. Просто при перенаправлении на страницу аутентификации в сессию добавляется url. А после того как пользователь успешно прошел аутентификацию, делается перенаправление обратно на сохраненный ранее в сессии url.
Реализуйте схожий механизм со своими нюансами и будет вам счастье.
Вообще (если ваша задача описана в вашем вопросе в полной мере) будет вполне достаточно сделать так:
if(auth()->guest()) {
session()->put('url.intended', url()->full());
return redirect()->route('auth');
}