运行演示代码时,我没有被重定向到Google帐户登录屏幕。
https://cloud.google.com/appengine/docs/standard/go/getting-started/authenticating-users
教程提到:"请注意,如果用户未登录,则HTTP状态代码302 Found会将浏览器重定向到Google帐户登录屏幕。"
func sign(w http.ResponseWriter, r *http.Request) {
// [START new_context]
c := appengine.NewContext(r)
// [END new_context]
g := Greeting{
Content: r.FormValue("content"),
Date: time.Now(),
}
// [START if_user]
if u := user.Current(c); u != nil {
g.Author = u.String()
}
key := datastore.NewIncompleteKey(c, "Greeting", guestbookKey(c))
_, err := datastore.Put(c, key, &g)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
http.Redirect(w, r, "/", http.StatusFound)
// [END if_user]
}
源代码:
https://github.com/GoogleCloudPlatform/appengine-guestbook-go/blob/part4-usingdatastore/hello.go
似乎缺少某些东西,例如:
if u == nil {
url, _ := user.LoginURL(ctx, "/")
fmt.Fprintf(w, `<a href="%s">Sign in or register</a>`, url)
return
}
如果我错了,当前代码如何将用户重定向到登录屏幕?
答案 0 :(得分:1)
你是对的。要登录用户,您必须将其重定向到LoginURL
,如上所述。用户访问此网址后,应用引擎会让他们使用自己的Google帐户登录。
但是,您上面链接的示例代码不需要用户登录。如果用户已登录,则代码将获取其ID并将其用作问候语的作者。如果没有,它只是根据模板匿名调用用户:
{{with .Author}}
<p><b>{{.}}</b> wrote:</p>
{{else}
<p>An anonymous person wrote:</p>
{{end}}