Laravel:在 ajax 请求的会话过期后重定向到登录
Laravel: Redirect to login after session has expired on ajax request
如果我登录到我的 Web 应用程序,等待会话过期,然后使用我的 Web 应用程序中的表单发出 ajax 请求 我收到控制台中显示的以下错误:
Failed to load resource: the server responded with a status of 500 (Internal Server Error)
理想情况下,会发生的是重定向到登录页面或错误消息显示在触发 ajax 请求的表单下(即对用户有意义的内容)。可能值得注意的是,我已经有客户端代码来抛出错误,以便在用户在表单上出现验证错误时向用户显示错误消息。
我相信我知道如何检查会话是否已过期并向用户返回有用的内容,告诉他们登录,但我不确定如何在全球范围内实现这一点。所以我想知道是否可以从 Laravel 的后端全局处理此问题,并且(或者)我是否需要为每个 ajax 请求编写一些逻辑来捕获问题以显示错误消息客户端?
我正在使用Laravel和Javascript/JQuery。感谢您的任何帮助!
以下是针对您的情况的快速解决方案:
控制器(例如 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
使用中间件
中间件:
<?php namespace App'Http'Middleware;
class OldMiddleware {
/**
* Run the request filter.
*
* @param 'Illuminate'Http'Request $request
* @param 'Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if(!**condition to check login**)
{
// if session is expired
return response()->json(['message' => 'Forbidden!'],403);
}
return $next($request);
}
}
路线:
Route::group(['middleware' => ''App'Http'Middleware'OldMiddleware'], function(){
//put the routes which needs authentication to complete
});
视图:
$.ajax({
type: 'post',
url: {{route('someroute')}}
//etc etc
}).done(function(data){
//do if request succeeds
}).fail(function(x,y,z){
//show error message or redirect since it is failed.
});
相关文章:
- 通过javascript重定向html传递php变量
- JavaScript下拉菜单-点击按钮并根据所选值重定向到url
- 使用angular重定向到html页面
- 如何在chrome扩展中重定向到html页面
- 无法从jquery Mobile导航栏重定向到另一个页面
- ng视图外的链接重定向到ng视图内的页面
- 在phonegap应用程序内部重定向不起作用
- CORS-重定向到第二个GET正在接收的页面
- AJAX不会在文件上传后重定向到网页-POST方法
- 重定向时角度刷新浏览器
- 通过链接重定向不;我不在jstree中工作
- 根据select选项元素将表单重定向到不同的URL
- 通过JQuery重定向到另一个页面
- Laravel:在 ajax 请求的会话过期后重定向到登录
- 如何在 JavaScript 计时器过期后重定向
- 如何在会话过期时从 ajax 响应自动重定向网页
- 如何在会话令牌过期时将用户重定向到登录页面
- 有没有办法让Javascript在点击刷新后重定向页面(会话已经过期)
- 登录cookie过期时重定向父页
- 当服务器会话过期时,使用javascript的settimeout()函数重定向到登录页面