Golang模板渲染异常:重命名CsrfToken为Token后页面内容缺失
问题:Golang模板渲染异常排查
初始状态下,localhost:8080/search-availability页面渲染正常。
异常触发场景1
将templates\search-availability.page.tmpl第13行的代码:
<input type="text" name="csrf_token" value="{{.CsrfToken}}">
修改为:
<input type="text" name="csrf_token" value="{{.WrongToken}}">
页面中「Search for Availability」下方的所有内容会直接消失。
调试操作及持续异常表现
为调试另一问题,执行了以下修改:
- 修改
pkg\models\templatedata.go中的TemplateData结构体,将CsrfToken字段重命名为Token:
type TemplateData struct { StringMap map[string]string IntMap map[string]int FloatMap map[string]float64 Data map[string]interface{} // CsrfToken string Token string Flash string Error string }
- 修改
templates\search-availability.page.tmpl第13行代码:
<!-- <input type="text" name="csrf_token" value="{{.CsrfToken}}"> --> <input type="text" name="csrf_token" value="{{.Token}}">
- 修改
pkg\render\render.go的AddDefaultData函数:
func AddDefaultData(td *models.TemplateData, r *http.Request) *models.TemplateData { // td.CsrfToken = nosurf.Token(r) fmt.Printf("Token before: %s\n", td.Token) td.Token = nosurf.Token(r) fmt.Printf("Token after: %s\n", td.Token) return td }
执行go run ./cmd/web/*.go启动服务后,终端输出显示Token已成功赋值:
Starting a server on port :8080 2023/03/12 23:54:46 SessionLoad 2023/03/12 23:54:46 NoSurf 2023/03/12 23:54:47 Hit the page 2023/03/12 23:54:47 Availability Token before: Token after: ERyPRtSgyVxmtthfMD49BsysXczubQfn7SQ3+L0ntc+6PQoHlaykAYejIa6Vw4m4omkgO94tVi/YiD0baSz2yw==
VS Code代码补全能正常识别td.Token,但页面表现仍与使用WrongToken时一致——「Search for Availability」下方内容消失。移除上述两行input代码后,页面内容恢复正常。
请问为何会出现此异常?
内容的提问来源于stack exchange,提问作者CaTx
相关产品推荐
相关产品推荐

