이것은 꽤 기본적인 흐름처럼 보이며 Laravel
기본적인 것들에 대한 많은 훌륭한 솔루션을 가지고 있습니다.
사용자는 인증이 필요한 링크를 클릭합니다. Laravel의 인증 필터가 시작되어 로그인 페이지로 라우팅됩니다. 사용자가 로그인 한 다음 ‘인증’필터가 시작되기 전에 접속하려는 원래 페이지로 이동합니다.
원래 어떤 페이지로 이동하려고했는지 알 수있는 좋은 방법이 있습니까? 라 라벨은 요청을 가로채는 것이기 때문에 사용자가 로그인 한 후 쉽게 라우팅하기 위해 어딘가를 추적하는지 알지 못했습니다.
그렇지 않다면, 여러분 중 일부가 이것을 수동으로 구현 한 방법에 대해 궁금합니다.
답변
라 라벨 5.3 이상
아래에서 Scott의 답변을 확인하십시오 .
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');
}
라 라벨 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');
}
라 라벨 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 외에 세션에서 리다이렉션을 설정할 수있게하며 마술처럼 작동합니다.
답변
라 라벨> = 5.3
5.3의 Auth 변경은 Auth Middleware가 서비스 컨테이너로 이동되었으므로이 구현을 조금 더 쉽고 5.2와 약간 다릅니다.
새로운 미들웨어 인증 리디렉터 수정
/app/Http/Middleware/RedirectIfAuthenticated.php
핸들 기능을 약간 변경하여 다음과 같이 표시하십시오.
public function handle($request, Closure $next, $guard = null)
{
if (Auth::guard($guard)->check()) {
return redirect()->intended('/home');
}
return $next($request);
}
TL; DR 설명
유일한 차이점은 네 번째 줄입니다. 기본적으로 다음과 같습니다.
return redirect("/home");
Laravel> = 5.3은 Auth Guard를 확인할 때 마지막 “의도 된”경로를 자동으로 저장하므로 다음과 같이 변경됩니다.
return redirect()->intended('/home');
그러면 Laravel은 로그인하기 전에 마지막으로 의도 한 페이지로 리디렉션하도록 지시합니다.
이것이 다른 사람에게 도움이되기를 바랍니다 .5.2와 5.3의 차이점에는 그다지 많지 않으며이 분야에는 특히 몇 가지가 있습니다.
답변
나는 당신에게 매우 도움이 될 두 가지 위대한 방법을 발견했습니다.
Redirect::guest();
Redirect::intended();
인증이 필요한 경로에이 필터를 적용 할 수 있습니다.
Route::filter('auth', function()
{
if (Auth::guest()) {
return Redirect::guest('login');
}
});
이 방법은 기본적으로 방문하려는 페이지를 저장하는 것이며 로그인 페이지로 리디렉션됩니다 .
사용자가 인증되면 전화를 걸 수 있습니다
return Redirect::intended();
처음에 도달하려는 페이지로 리디렉션됩니다.
나는 보통 아래 방법을 사용하지만 그것을하는 좋은 방법입니다.
Redirect::back()
이 멋진 블로그를 확인할 수 있습니다 .
답변
Redirect :: intended 기능을 사용할 수 있습니다 . authenticaton 필터에 걸리기 전에 사용자가 액세스하려는 URL로 사용자를 리디렉션합니다. 예정된 대상을 사용할 수없는 경우이 방법에 대체 URI가 제공 될 수 있습니다.
로그인 / 등록 후 :
return Redirect::intended('defaultpageafterlogin');
답변
언어 선택기 코드에서 잠시 동안 이것을 사용했습니다. 한 페이지 만 돌아 가면 괜찮습니다.
return Redirect::to(URL::previous());
그것은 가장 강력한 솔루션은 아니지만 매우 쉬우 며 몇 가지 퍼즐을 해결하는 데 도움이 될 수 있습니다. 🙂
답변
LoginControllers 생성자를 다음과 같이 변경하십시오.
public function __construct()
{
session(['url.intended' => url()->previous()]);
$this->redirectTo = session()->get('url.intended');
$this->middleware('guest')->except('logout');
}
로그인 페이지 (2 페이지) 전에 페이지로 다시 리디렉션됩니다.
답변
return Redirect::intended('/');
그러면 프로젝트의 기본 페이지 즉 시작 페이지로 리디렉션됩니다.