在控制器中检查这样的策略:
$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函数发送异常?
答案 0 :(得分:0)
如您所见,Laravel将自动中止请求并使用正确的HTTP错误代码403 Unauthorized进行响应。这也是AJAX请求的情况。
大多数AJAX库(如jQuery或Axios)都可以很好地处理HTTP错误代码。您只需查找错误代码403即可。
例如在jQuery中:
$.ajax('/whatever', {
// ...
error: function (xhr) {
if (xhr.status == 403) {
alert('Unauthorized');
}
}
});