You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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」下方的所有内容会直接消失。

调试操作及持续异常表现

为调试另一问题,执行了以下修改:

  1. 修改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
}
  1. 修改templates\search-availability.page.tmpl第13行代码:
<!-- <input type="text" name="csrf_token" value="{{.CsrfToken}}"> -->
<input type="text" name="csrf_token" value="{{.Token}}">
  1. 修改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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 00:23:12