如果在 laravel 5.1 中未授权操作,则通过 ajax 显示错误
Posted
技术标签:
【中文标题】如果在 laravel 5.1 中未授权操作,则通过 ajax 显示错误【英文标题】:display error through ajax if action is not authorized in laravel 5.1 【发布时间】: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 函数?
【问题讨论】:
【参考方案1】:如您所见,Laravel 将自动中止请求并以正确的 HTTP 错误代码 403 Unauthorized 进行响应。 AJAX 请求也是如此。
大多数 AJAX 库(如 jQuery 或 Axios)都可以很好地处理 HTTP 错误代码。您可以直接查找错误代码 403。
例如在 jQuery 中:
$.ajax('/whatever',
// ...
error: function (xhr)
if (xhr.status == 403)
alert('Unauthorized');
);
【讨论】:
以上是关于如果在 laravel 5.1 中未授权操作,则通过 ajax 显示错误的主要内容,如果未能解决你的问题,请参考以下文章
Laravel 5.1:如何使用 oauth2-server-laravel?