PHP学习WebLaravel开发实践

Swagger UI怎么支持Laravel的CSRF Token

2017-05-25  本文已影响225人  该叶无法找到

有些同学在做前后端分离项目时用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的API文档在这里

如果Swagger UI不是由PHP渲染输出就比较麻烦了,能改代码的话,可以让前端自动设置Token,不然看看关于Swagger授权相关开发方法也许能够曲线救国实现。

Swagger UI 版本 3.x

关注这里

上一篇下一篇

猜你喜欢

热点阅读