有些同學在做前后端分離項目時用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
授權相關開發方法也許能夠曲線救國實現。