代码之家  ›  专栏  ›  技术社区  ›  Ian.V

Golang CSRF在结构中保存模板字段

  •  0
  • Ian.V  · 技术社区  · 6 年前

    我正在尝试制作一个简单的Web服务器 bone 对于我的路线和 Gorilla csrf 对于csrf。我的问题是我无法保存csrf。结构中要在模板中使用的TemplateField(req)。

    导入:

    import (
        "database/sql"
        "net/http"
        "text/template"
    
        "github.com/go-zoo/bone"
        "github.com/gorilla/csrf"
    )
    

    结构:

    type Input struct {
        Title     string
        Name      string
        csrfField template.HTML // Error here: Undefined "text/template".HTML
    }
    

    处理程序代码:

    func RootHandler(rw http.ResponseWriter, req *http.Request) {
        temp, _ := template.ParseFiles("site/index.html")
        head := Input{Title: "test", csrf.TemplateTag: csrf.TemplateField(req)}
        temp.Execute(rw, head)
    }
    

    我已尝试更改模板。HTML类型转换为字符串,然后csrf出现错误。模板字段(req):

    未知字段的csrf。输入类型的结构文字中的TemplateTag

    有人能帮忙吗?我用错类型了吗?

    2 回复  |  直到 6 年前
        1
  •  3
  •   Cerise Limón    6 年前

    这个 HTML 类型在“html/模板”中声明。导入“html/模板”而不是“文本/模板”。

    模板引擎会忽略未报告的字段。 Export 以大写字符开头的字段名。

    import (
        "database/sql"
        "net/http"
        "html/template"
    
        "github.com/go-zoo/bone"
        "github.com/gorilla/csrf"
    )
    Struc:
    
    type Input struct {
        Title     string
        Name      string
        CSRFField template.HTML 
    }
    
        2
  •  2
  •   kbar    5 年前

    来自文本/模板文档的第二句:

    To generate HTML output, see package html/template, which has the same 
    interface as this package but automatically secures HTML output against 
    certain attacks.
    

    文本/模板没有HTML方法,因此您收到了一个未定义的错误。

    快乐的编码。