这似乎是一个非常基本的流程,Laravel为基本的事情提供了很多很好的解决方案,我觉得我遗漏了一些东西
用户单击需要验证的链接。Laravel的auth过滤器启动并将其路由到登录页面。用户登录,然后转到他们在“auth”过滤器启动之前试图访问的原始页面
有没有一个好方法可以知道他们最初想要进入的页面?由于Laravel是拦截请求的人,我不知道它是否在用户登录后跟踪某个地方以便于路由
如果不是,我很想知道你们中的一些人是如何手动实现的
对于Laravel 5.3及以上版本
检查下面斯科特的答案
对于Laravel 5至5.2
简言之
在身份验证中间件上:
//将用户重定向到“/login”
//并存储会话上正在访问的url
if(Auth::guest()){
return redirect()->;guest('login');
}
返回$next($request);
登录操作时:
//将用户重定向回预期页面
//如果没有默认页面,则使用默认页面
如果(身份验证::尝试(['email'=>;$email,'password'=>;$password])){
返回重定向()->;预期的('defaultpage');
}
对于Laravel 4(旧答案)
在作出这一答复时,框架本身没有提供任何官方支持。现在,你可以使用bgdrl在下面指出的方法:这个方法:(我试着更新他的答案,但他似乎不接受)
在身份验证筛选器上:
//将用户重定向到“/login”
//并存储会话上正在访问的url
路由::过滤器('auth',函数(){
if(Auth::guest()){
返回重定向::guest('login');
}
});
登录操作时:
//将用户重定向回预期页面
//如果没有默认页面,则使用默认页面
如果(身份验证::尝试(['email'=>;$email,'password'=>;$password])){
返回重定向::预期('defaultpage');
}
对于Laravel 3(更老的答案)
您可以这样实现它:
Route::filter('auth',function(){
//如果没有经过用户身份验证的会话
if(Auth::guest()){
//在会话中存储当前url并重定向到登录页面
会话::put('redirect',URL::full());
返回Redirect::to('/login');
}
if($redirect=Session::get('redirect')){
会话::忘记('redirect');
return Redirect::to($Redirect);
}
});
控制器上的
//
公共函数get_login()
{
$this->;layout->;nest('content','auth.login');
}
公共功能post_登录()
{
$credentials=[
“用户名”=>;输入::获取(“电子邮件”),
'password'=>;输入::获取('password')
];
如果(身份验证::尝试($credentials)){
return Redirect::to('logged_in_homepage_here');
}
返回Redirect::to('login')->;with_input();
}
将重定向存储在会话中有一个好处,即即使用户未键入其凭据或他没有帐户且必须注册,也可以将重定向持久化
这还允许除了Auth之外的任何东西在会话上设置重定向,它将神奇地工作