Mam wbudowany blog w serwisie Laravel i komentowanie posta (jeśli wylogujesz się) musisz się zalogować. Umieszczę taki link:
<a href="{{ URL::route("login") }}">login</a> to do this.
To przekierowuje do formularza logowania, który raz wypełniony i użytkownik jest uwierzytelniony, mam to:
return Redirect::intended("/");
Który przenosi użytkownika na stronę główną, nie strona, na której zamierzali się znaleźć, w tym przypadku strona z postem, który kliknęli login
link z, aby móc komentować. Jak mogę w takim przypadku zwrócić je z powrotem do zamierzonego adresu URL?
Odpowiedzi:
4 dla odpowiedzi № 1Tak właściwie, Redirect::intended("/")
działa, jeśli w sesji jest dostępny klucz jako url.intended
w przeciwnym razie przekierowuje do domyślnego URL
który jest w twoim przypadku "/", więc na pewno nie umieściłeś URL
w sesji. Aby to osiągnąć, możesz umieścić URL
w sesji używając czegoś takiego:
Session::put("url.intended", "url...");
Tak więc prawdopodobnie w linku do logowania możesz dodać ciąg zapytania w następujący sposób:
<a href="{{ URL::route("login") }}?intended=1">login</a>
Możesz więc śledzić przekierowanie i metodę tej trasy (przed powrotem) View
) po prostu umieść poprzedni URL
w sesji, używając czegoś takiego:
if(Input::get("intended")) {
Session::put("url.intended", URL::previous());
}
Następnie zanim przekierujesz się z tego miejsca, usuń URL
z sesji używając czegoś takiego:
$intendedUrl = Session::get("url.intended", url("/"));
Session::forget("url.intended");
return Redirect::to($intendedUrl);
To powinno rozwiązać problem. Możesz również sprawdzić ta odpowiedź, może być pomocne.
2 dla odpowiedzi nr 2
Redirect::intended
wymaga dwóch części do pracy. Pierwsza to sytuacja, w której użytkownik próbuje uzyskać dostęp do zastrzeżonej strony /orders
ale nie jesteś zalogowany, przekierowujesz ich na stronę logowania przez:
redirect()->guest("/login");
Następnie w odpowiedzi na żądanie logowania, jeśli uwierzytelnienie się powiedzie, zadzwonisz:
redirect()->intended("/dashboard");