这似乎是一个相当基础的流程,而且 Laravel
有许多好的解决方案来处理基本的事情,我觉得我可能遗漏了什么。
用户点击需要身份验证的链接。 Laravel 的 auth 过滤器启动并将用户路由到登录页面。 用户登录后,再次访问之前被“auth”过滤器拦截的原始页面。
有没有一种很好的方法可以知道他们最初想要进入哪个页面?由于 Laravel 拦截请求,我不知道它是否在某处记录以便用户登录后轻松路由。
如果没有,我很想听听你们中的一些人如何手动实现这一点。
// Also place this code into base controller in contract function, because ever controller extends base controller
if(Auth::id) {
//here redirect your code or function
}
if (Auth::guest()) {
return Redirect::guest('login');
}
你在你的routes.php中尝试过这个吗?
Route::group(['middleware' => ['web']], function () {
//
Route::get('/','HomeController@index');
});
如果您正在使用其他中间件,例如Admin中间件,您可以使用以下方法为url.intended设置会话:
基本上,我们需要手动设置\Session::put('url.intended', \URL::full());
以进行重定向。
示例
if (\Auth::guard($guard)->guest()) {
if ($request->ajax() || $request->wantsJson()) {
return response('Unauthorized.', 401);
} else {
\Session::put('url.intended', \URL::full());
return redirect('login');
}
}
在登录尝试时
确保在登录尝试时使用return \Redirect::intended('default_path');
redirect()->guest('login')
的作用。 - Emile Bergeron我正在使用自定义登录控制器和中间件,用于Laravel 5.7的以下方法,但我希望它适用于任何版本的laravel 5
中间件内部
if (Auth::check()){
return $next($request);
}
else{
return redirect()->guest(route('login'));
}
控制器登录方法内部
if (Auth::attempt(['email' => $email, 'password' => $password])) {
return redirect()->intended('/default');
}
如果您需要将意图 URL 传递给客户端,可以尝试以下操作
if (Auth::attempt(['username' => $request->username, 'password' => $request->password])) {
$intended_url= redirect()->intended('/default')->getTargetUrl();
$response = array(
'status' => 'success',
'redirectUrl' => $intended_url,
'message' => '登录成功,您将被重定向到主页..', );
return response()->json($response);
} else {
$response = array(
'status' => 'failed',
'message' => '用户名或密码不正确', );
return response()->json($response);
}
return redirect()->guest('/signin');
不要像这样:
return redirect()->intended('/signin');
Laravel 5.3 这对我来说实际上只需要更新 LoginController.php 就可以了。
use Illuminate\Support\Facades\Session;
use Illuminate\Support\Facades\URL;
public function __construct()
{
$this->middleware('guest', ['except' => 'logout']);
Session::set('backUrl', URL::previous());
}
public function redirectTo()
{
return Session::get('backUrl') ? Session::get('backUrl') : $this->redirectTo;
}
参考:https://laracasts.com/discuss/channels/laravel/redirect-to-previous-page-after-login