google-app-engine - Go Appengine 教程是否缺少 LoginURL 重定向语句?

标签 google-app-engine go

当我运行演示代码时,我没有被重定向到 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
        } 

如果我错了,当前代码如何将用户重定向到登录屏幕?

最佳答案

你是对的。要登录用户,您必须将他们重定向到如上所述的 LoginURL。一旦用户访问此 URL,应用引擎将允许他们使用他们的 Google 帐户登录。

但是,您上面链接的示例代码不需要用户登录。如果用户登录,代码将获取他们的 ID 并将其用作问候语的作者。如果不是,它只是根据模板调用匿名用户:

{{with .Author}}
  <p><b>{{.}}</b> wrote:</p>
{{else}
  <p>An anonymous person wrote:</p>
{{end}}

关于google-app-engine - Go Appengine 教程是否缺少 LoginURL 重定向语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43945213/

相关文章:

java - Google App Engine 未部署新的 web.xml

java - Google App Engine 用户代理

google-app-engine - Facebook 连接 GWT 和 App Engine (Java)

google-app-engine - 谷歌云存储强制下载

http - 如何在 GO 中执行 HEAD 请求?

docker - 程序干净退出,但 kubernetes 处于 CrashLoopBackOff 中

html - 如何使用 jquery 从 Rotten Tomatoes 检索搜索列表?

google-app-engine - 将长字符串转换为 int64 - Go

go - 两个Uint64的意外加法行为

go - Go项目中的配置格式