javascript - Laravel:在 ajax 请求 session 过期后重定向到登录

标签 javascript php jquery ajax laravel

如果我登录到我的网络应用程序,等待 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/

相关文章:

jquery - 将光标定位在文本输入的左侧

javascript - JS : check if setTimeout has finished or been canceled

循环内的 JavaScript 闭包——简单实用的例子

javascript - AngularJS 渲染模板到变量中

php - Cronjob 但适用于 jQuery/Javascript

javascript - 在我的 Django 应用程序中对 javascript 函数进行单元测试

javascript - 在 Javascript 中“卡住”数组?

javascript - 在 1 页而不是 2 页中添加编辑功能

php - 用上传的图片替换mysql中存储的图片

php - 查找php中两个日期之间的天数(逗号分隔)