Golang CSRF сохранить поле шаблона в структуре - PullRequest
0 голосов
/ 10 мая 2018

Я пытаюсь сделать простой веб-сервер, решив использовать кость для моих маршрутов и Gorilla csrf для csrf. У меня проблема в том, что я не могу сохранить csrf.TemplateField (req) в структуре для использования в шаблоне.

Импорт:

import (
    "database/sql"
    "net/http"
    "text/template"

    "github.com/go-zoo/bone"
    "github.com/gorilla/csrf"
)

Struc:

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):

неизвестное поле 'csrf.TemplateTag' в литерале структуры типа Input

Так кто-нибудь может помочь? Я использую неправильный тип?

Ответы [ 2 ]

0 голосов
/ 10 мая 2018

Из второго предложения текстовой / шаблонной документации:

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, поэтому вы получаете неопределенную ошибку.

Удачного кодирования.

0 голосов
/ 10 мая 2018

Тип HTML объявлен в "html / template". Импортируйте «html / template» вместо «text / template».

Модуль шаблонов игнорирует неэкспортированные поля. Экспорт имени поля, начиная имя с заглавной буквы.

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 
}
...