【问题标题】:display error through ajax if action is not authorized in laravel 5.1如果在 laravel 5.1 中未授权操作,则通过 ajax 显示错误
【发布时间】:2017-09-19 16:16:39
【问题描述】:

在控制器中检查这样的策略:

$this->authorize('user', $post);

在 5.1 的文档中,我们可以阅读:

如果动作被授权,控制器将继续正常执行;但是,如果授权方法确定该操作未授权,则会自动抛出 HttpException 并生成带有 403 Not Authorized 状态码的 HTTP 响应。如您所见,authorize 方法是一种方便、快捷的方式,可以通过一行代码对操作进行授权或引发异常。

好吧,这会引发异常并在此处停止其余代码的执行。问题是这发生在后台,用户不知道发生了什么。 所以我想要做的是在动作授权失败时动态显示一条消息(通过javascript)。我想也许要做到这一点,我必须抓住 laravel 正在抛出的 esception,然后将结果发送到我的 ajax 函数。例如

if ('status' == 403) {

$auth = 0

return Response()->json($auth);

}

然后在我的 ajax 函数中检查 $auth .. 或者有没有办法在授权失败后直接将异常发送到 ajax 函数?

【问题讨论】:

    标签: javascript php ajax laravel authorization


    【解决方案1】:

    如您所见,Laravel 将自动中止请求并以正确的 HTTP 错误代码 403 Unauthorized 进行响应。 AJAX 请求也是如此。

    大多数 AJAX 库(如 jQuery 或 Axios)都可以很好地处理 HTTP 错误代码。您可以直接查找错误代码 403。

    例如在 jQuery 中:

    $.ajax('/whatever', {
        // ...
        error: function (xhr) {
            if (xhr.status == 403) {
                alert('Unauthorized');
            }
        }
    });
    

    【讨论】:

      猜你喜欢
      • 2015-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-25
      • 1970-01-01
      相关资源
      最近更新 更多