在获取类型为map[string]interface{}with 的会话信息后this.GetSession("session_key"),我确实必须像这样显式设置上下文和类型断言会话,以便显式地将数据传递给模板。
// 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"}
但是,根据 Beego 的 session doc,看起来会话是隐式传递的,不需要任何类型断言或上下文传递(模板可以立即访问会话值,即{{.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
}
只有这样我才能将模板映射到这样的数据:
<img src="{{ .picture }}">
<p>Hello, {{ .nickname }}</p>
我很确定有必要设置模板数据。我只是不确定为什么上面的文档没有这样做。
任何帮助,将不胜感激。
浮云间
相关分类