2017-05-12 10 views
0

デモコードを実行するとGoogleアカウントのログイン画面にリダイレクトされません。Go AppengineチュートリアルにはLoginURLリダイレクトステートメントがありませんか?

https://cloud.google.com/appengine/docs/standard/go/getting-started/authenticating-users

チュートリアルは言及:「ユーザーがログインしていない場合、発見302のHTTPステータスコードは、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 
     } 

私が間違っている場合は、サインイン画面に現在のコードのリダイレクトユーザーをどうしますか?

答えて

1

あなたは正しいですか?ユーザーにログインするには、上記のようにLoginURLにリダイレクトする必要があります。ユーザーがこのURLにアクセスすると、アプリエンジンはそのGoogleアカウントを使用してログインできるようになります。

しかし、あなたは上記のリンクしたサンプルコードは、ログインするユーザーを必要としません。ユーザーがログインしている場合、コードが自分のIDを取得し、挨拶の著者としてことを使用しています。そうでない場合は、テンプレートごとにユーザーを匿名で呼び出します。

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

このチュートリアルコードには、ユーザーがログインする方法は含まれていません。 – BryanWheelock

+0

あなたは既にあなたの質問にその部分を持っています。 'user'パッケージから' LoginURL'関数を使い、それをインデックスページテンプレートに書き出します。ユーザーはそれをクリックしてログインすることができます。 – abhink

関連する問題