如果在laravel 5.1中未授权操作,则通过ajax显示错误

时间:2017-09-19 16:16:39

标签: javascript php ajax laravel authorization

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

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

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

如果操作被授权,控制器将继续正常执行;但是,如果authorize方法确定操作未被授权,则会自动抛出HttpException,从而生成具有403 Not Authorized状态代码的HTTP响应。如您所见,authorize方法是一种方便,快捷的方法来授权操作或使用单行代码抛出异常。

确定抛出异常并在那里停止执行其余代码。问题是这种情况发生在后台,用户不知道发生了什么。 所以我想要做的是如果动作未通过授权,即时显示消息(通过javascript)。我想也许这样做我必须抓住laravel抛出的esception,然后将结果发送到我的ajax函数。例如

if ('status' == 403) {

$auth = 0

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

}

然后在我的ajax函数中检查$ auth ..还是有一种方法可以在授权失败后直接向ajax函数发送异常?

1 个答案:

答案 0 :(得分:0)

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

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

例如在jQuery中:

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