有些同学在做前后端分离项目时用Swagger UI
会碰到没有CSRF Token
的报错,本文给出了支持CSRF Token
的思路,其实很简单。
另外,当前Swagger UI
已经更新到了3.x
版本,截止到目前为止官方还没确定地给出好的方案(有讨论在这里),不过看节奏应该在六月份内,所以我也不打算研究比较Hack
的方法,但如果你正好做过,欢迎在评论中给大家分享。3.x
是一个重构的版本,底层更统一不过还有待增强功能,静待官方继续努力。
Swagger UI 版本 2.x
思路真的很简单。按照Laravel官方文档所说,在前端发起请求的时候附带一个请求头(Header)就行了。如果Swagger UI
的界面是PHP输出的则最好办,示例如下:
// 省略若干行...
<!-- 添加下面这行到Swagger UI的Blade模版中<head>标签中 -->
<meta name="csrf-token" content="{{ csrf_token() }}">
// 省略若干行...
<script>
// 省略若干行...
window.swaggerUi.load();
// 添加下面这段代码到"window.swaggerUi.load();"的后面
swaggerUi.api.clientAuthorizations.add(
"X-CSRF-TOKEN",
new SwaggerClient.ApiKeyAuthorization(
"X-CSRF-TOKEN",
$('meta[name="csrf-token"]').attr('content'),
"header"
)
);
// 省略若干行...
</script>
如果Swagger UI
不是由PHP
渲染输出就比较麻烦了,能改代码的话,可以让前端自动设置Token
,不然看看关于Swagger
授权相关开发方法也许能够曲线救国实现。