Google App EngineでGoogle認証

created at 2016/10/05 21:49:25

はじめに

前回の続きでGoogle認証をさせるアプリを作るチュートリアルをやりました :muscle:

hello.go

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 :airplane:

// 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/にアクセスしてみると、こうなった。

スクリーンショット 2016-10-05 21.40.10.png (54.9 kB)

Loginしてみるとこんな感じ。

スクリーンショット 2016-10-05 21.40.57.png (17.7 kB)

デプロイすると

いやいやさすがにこれは、と思ったけど、やっぱりこれは開発用の機能らしい。

デプロイするとGoogleのアカウントを選ぶ画面にリダイレクトされた。

スクリーンショット_2016-10-05_21_44_19.png (172.4 kB)

アカウントを選ぶとこうなる。

スクリーンショット 2016-10-05 21.44.33.png (20.2 kB)

Googleにログインしてない状態でアクセスすると、Googleのおなじみのログイン画面がでてくる。

なんかよくわからんままGoogle認証できた。すごい :flushed: