egg.js的第一個坑——post請求的正確姿式

爲了學習egg框架是如何接受常見的http請求,以及如何返回數據,我特地寫了個form的demohtml

<!--  view/hello.ejs -->
<form action="/form" method="post">
  <input type="text" name="name" placeholder="name">
  <input type="text" name="age" placeholder="age">
  <input type="submit" value="提交">
</form>
// router.js

'use strict';

module.exports = app => {
  app.get('/', 'render.ejs');
  app.post('/form',app.controller.form.listPosts)
};
// controller/form.js
const Controller = require('egg').Controller; module.exports = class PostController extends Controller { * listPosts() { this.ctx.body = { name: this.ctx.request.body.name, age: this.ctx.request.body.age } } };
<h3>name: <%=name%></h3>
<h3>age: <%= age %></h3>

而後我就直接開始試驗了,結果一直報錯,403,說是什麼安全驗證什麼鬼的,後面我詳細去看官方文檔,看到了這樣一句話安全

附:
這裏直接發起 POST 請求會報錯:'secret is missing'。錯誤信息來自 koa-csrf/index.js#L69 。

後面詳細的看完才知道,原來是egg框架的這個內置安全插件搞的鬼。簡單的說吧,這個插件的功能就是在你每次post請求進來的時候,會先檢查你 請求自帶的參數裏面帶不帶一個特定的參數,這個參數就至關於一個祕鑰,它存在於你請求的cookie中,你請求的時候須要帶上一個特定參數名,而且參數值等於這個祕鑰的數據,也能夠直接放在請求頭header裏面,看文檔去設置就好。服務器

再說明白一點,你請求的時候,服務器會問你「天王蓋地虎」,你必須回答「小雞燉蘑菇」,一個道理,只不過這個 「小雞燉蘑菇」 口令是存在於你請求的cookie裏面的,你須要作的就是從cookie中拿出來,而後放到header裏面或者直接加到你請求的參數裏面 https://eggjs.org/zh-cn/core/security.html#安全威脅-csrf-的防範cookie

總的來講,我的感受阿里的這個框架仍是很是牛逼的,至少安全方面作得很是好,值得去深刻的學習一下。app

相關文章
相關標籤/搜索