Golang CSRF 在结构中保存模板字段
Golang CSRF save template field in struct
我正在尝试制作一个简单的网络服务器并决定将 bone for my routes and 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)
}
我尝试将 template.HTML 类型更改为字符串,然后我收到 csrf.TemplateField(req) 错误:
unknown field 'csrf.TemplateTag' in struct literal of type Input
有人能帮忙吗?我用错类型了吗?
HTML
类型在 "html/template" 中声明。导入 "html/template" 而不是 "text/template".
模板引擎忽略未导出的字段。 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
}
来自text/template文档的第二句:
To generate HTML output, see package html/template, which has the same
interface as this package but automatically secures HTML output against
certain attacks.
text/template 没有 HTML 方法,因此您收到未定义的错误。
编码愉快。
我正在尝试制作一个简单的网络服务器并决定将 bone for my routes and 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)
}
我尝试将 template.HTML 类型更改为字符串,然后我收到 csrf.TemplateField(req) 错误:
unknown field 'csrf.TemplateTag' in struct literal of type Input
有人能帮忙吗?我用错类型了吗?
HTML
类型在 "html/template" 中声明。导入 "html/template" 而不是 "text/template".
模板引擎忽略未导出的字段。 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
}
来自text/template文档的第二句:
To generate HTML output, see package html/template, which has the same
interface as this package but automatically secures HTML output against
certain attacks.
text/template 没有 HTML 方法,因此您收到未定义的错误。
编码愉快。