Learning Go and Gin из здесь .Таким образом, у меня есть маршрутизатор, подобный этому
userRoutes.POST("/login", ensureNotLoggedIn(), performLogin)
, и функция обработчика выглядит так
func performLogin(c *gin.Context) {
username := c.PostForm("username")
password := c.PostForm("password")
if isUserValid(username, password) {
token := generateSessionToken()
c.SetCookie("token", token, 3600, "", "", false, true)
//is_logged_in is not working in template
c.Set("is_logged_in", true)
render(c, gin.H{"title": "Successful Login"}, "login-successful.html")
} else {
c.HTML(http.StatusBadRequest, "login.html", gin.H{
"ErrorTitle": "Login Failed",
"ErrorMessage": "Invalid credentials provided",
})
}
}
, а мой шаблон выглядит как
{{ if .is_logged_in }}
<li><a href="/article/create">Create Article</a></li>
{{ end }}
{{ if not .is_logged_in }}
<li><a href="/u/register">Register</a></li>
{{end}}
Но в концеэта переменная в шаблоне, кажется, не работает, только второй раздел показывает, первая ссылка «Создать статью» всегда скрывается.
Обновление
Я изменил функцию обработчика накак-то так,
render(c, gin.H{"title": "Successful Login", "is_logged_in": c.MustGet("is_logged_in").(bool)}, "login-successful.html")
явно передавая переменную.Теперь элемент шаблона скрыть и показать правильно.Так что-нибудь изменилось в Голанге или Джине, чтобы .Set()
вел себя по-другому?