はじめに
前回の続きでGoogle認証をさせるアプリを作るチュートリアルをやりました 💪
hello.go
package hello
import (
"fmt"
"net/http"
"appengine"
"appengine/user"
)
func init() {
http.HandleFunc("/", handler)
}
func handler(w http.ResponseWriter, r *http.Request) {
c := appengine.NewContext(r)
u := user.Current(c)
if u == nil {
url, err := user.LoginURL(c, r.URL.String())
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
w.Header().Set("Location", url)
w.WriteHeader(http.StatusFound)
return
}
fmt.Fprintf(w, "Hello, %v!", u)
}
appengine.Context
は現在のリクエストに関連するcontext.Context
を返す。
どうでもいいけどソース読んでたらコメントがナイスだった。in-flight HTTP request
✈️
// NewContext returns a context for an in-flight HTTP request.
// This function is cheap.
func NewContext(req *http.Request) context.Context {
return WithContext(context.Background(), req)
}
user.Current
は現在ログインしてるユーザが取れるらしい。ほう。
user.LoginURL
はログインURLを返す。第2引数はログイン後のリダイレクト先。
どうなる
起動してhttp://localhost:8080/にアクセスしてみると、こうなった。
Loginしてみるとこんな感じ。
デプロイすると
いやいやさすがにこれは、と思ったけど、やっぱりこれは開発用の機能らしい。
デプロイするとGoogleのアカウントを選ぶ画面にリダイレクトされた。
アカウントを選ぶとこうなる。
Googleにログインしてない状態でアクセスすると、Googleのおなじみのログイン画面がでてくる。
なんかよくわからんままGoogle認証できた。すごい 😳