После получения информации о сеансе типа map[string]interface{}
с помощью this.GetSession("session_key")
мне пришлось явно установить контекст и тип assert для сеанса, как это, чтобы явно передать данные в шаблон.
// Get the session
profile := this.GetSession("profile")
// Have to add data to the template's context
this.Data["nickname"] = profile.(map[string]interface{})["nickname"].(string)
this.Data["picture"] = profile.(map[string]interface{})["picture"].(string)
// Render template
this.TplNames = "user.html"
Данные сеанса (тип map[string]interface{}
) выглядят так:
{"nickname": "joe", "picture": "urltotheimg"}
Однако, согласно doc сеанса Beego, похоже, что сеанс передается неявно без каких-либо утверждений типа или передачи контекста (шаблон имеет немедленный доступ к значениям сеанса, т.е. {{.nickname}}
и {{.picture}}
)
Это контроллер, который устанавливает сеанс перед перенаправлением на /user
// Inherit beego's base controller
type MyController struct {
beego.Controller
}
func (this *MyController) Get() {
// code for getting token here
// Getting the User information
client := conf.Client(oauth2.NoContext, token)
resp, err := client.Get("https://" + domain + "/userinfo")
if err != nil {
this.Redirect("/error", 500)
return
}
// Reading the body for user's information
raw, err := ioutil.ReadAll(resp.Body)
defer resp.Body.Close()
if err != nil {
this.Redirect("/error", 500)
return
}
// Unmarshalling the JSON of the Profile
var profile map[string]interface{}
if err := json.Unmarshal(raw, &profile); err != nil {
this.Redirect("/error", 500)
return
}
// Saving the information to the session.
this.SetSession("profile", profile)
// redirect to /user
this.Redirect("/user", 301)
}
Это контроллер "/ user"
type UserController struct {
beego.Controller
}
func (this *UserController) Get() {
// get the saved session
profile := this.GetSession("profile")
// without setting the template data here, the session data won't be
// available in user.html
this.Data["nickname"] = profile.(map[string]interface{})["nickname"].(string)
this.Data["picture"] = profile.(map[string]interface{})["picture"].(string)
this.TplNames = "user.html"
}
Только тогда я могу сопоставить шаблон с данными следующим образом:
<img src="{{ .picture }}">
<p>Hello, {{ .nickname }}</p>
Я совершенно уверен, что необходимо установить данные шаблона. Я просто не уверен, почему вышеуказанный документ этого не сделал.
Любая помощь будет оценена по достоинству.
<img src={{ .picture }}
отсутствует . Кроме того, вы читаете эти значения из Auth0Controller. Вы уверены, что эти значения установлены правильно? Что произойдет, если вы просто жестко закодируете значения в UserController, например:this.Data["nickname"] = "User's Nickname"
иthis.Data["picture"] = "/path/to/img.jpg"
- person abm   schedule 12.12.2015