如果我登录到我的网络应用程序,等待 session 过期,然后在我的网络应用程序中使用表单发出 ajax 请求,我会在控制台中看到以下错误:
无法加载资源:服务器响应状态为 500(内部服务器错误)
理想情况下会发生重定向到登录页面或在触发 ajax 请求的表单下显示错误消息(即对用户有意义的内容)。可能值得注意的是,如果用户在表单上出现验证错误,我已经有了客户端代码来抛出错误以向用户显示错误消息。
我相信我知道如何检查 session 是否已过期并返回对用户有用的信息,告诉他们登录,但我不确定如何在全局范围内实现这一点。所以我想知道是否可以从 Laravel 的后端全局处理这个问题和(或)我是否需要为每个 ajax 请求编写一些逻辑来捕获问题以在客户端显示错误消息?
我正在使用 Laravel 和 Javascript/JQuery。感谢您的帮助!
最佳答案
这是针对您的案例的快速解决方案:
Controller (例如 AuthController.php):
/**
* Check user session.
*
* @return Response
*/
public function checkSession()
{
return Response::json(['guest' => Auth::guest()]);
}
此外,可能需要添加此方法名称以供 guest
中间件忽略:
$this->middleware('guest', ['except' => ['logout', 'checkSession']]);
路线:
Route::get('check-session', 'Auth\AuthController@checkSession');
布局(JS部分),仅适用于登录用户:
@if (Auth::user())
<script>
$(function() {
setInterval(function checkSession() {
$.get('/check-session', function(data) {
// if session was expired
if (data.guest) {
// redirect to login page
// location.assign('/auth/login');
// or, may be better, just reload page
location.reload();
}
});
}, 60000); // every minute
});
</script>
@endif
关于javascript - Laravel:在 ajax 请求 session 过期后重定向到登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29072999/