如果在 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 索引和创建授权

使用MAMP在OSX上安装Laravel 5.1

Laravel 5.1:如何使用 oauth2-server-laravel?

Alamofire 5中未设置授权标头?

Twitter API 授权在浏览器中未通过 CORS 预检

如果在 Laravel 5.1 中找不到路由,则显示 404 页面