登录后,Laravel重定向回原始目的地

这似乎是一个非常基本的流程,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之外的任何东西在会话上设置重定向,它将神奇地工作

发表评论