昨日に引き続き。今日は3.3章、 Users Service。Googleアカウントを利用した認証の仕組みが、GAE ならお手軽に使えるよー、という章。
今回も前回と同じく、写経をすることによって得られた気付き、学びをメモするよ。
3.3章の概要
- 3.2章で作成した議事録Webアプリケーションに、Googleアカウントでのログイン機能を実装する。
- 「議事録」(Minutes)エンティティと「メモ」(Memo)エンティティの両方に、
Author
プロパティを追加 - デプロイ済みのアプリケーション
- 3.3章の写経のプルリクエスト
スクショは↓。
学んだことメモ
Datastore に突っ込める type として User
は列挙されていないけど
The datastore package | App Engine standard environment for Go | Google Cloud を見る限りは列挙されてないんだけど、The user package | App Engine standard environment for Go | Google Cloud を見てみると、こいつは単純な struct なので、structs whose fields are all valid value types
ってことで、下記のように普通に突っ込める。
type Minutes struct { Key *datastore.Key Title string Author user.User CreatedAt time.Time }
func SaveAs(c appengine.Context, title string, u *user.User) (*datastore.Key, error) { key := datastore.NewKey(c, "minutes", uuid.New(), 0, nil) m1 := Minutes{ Key: key, Title: title, Author: *u, CreatedAt: time.Now(), }
取得はこう。
import "appengine/user" u := user.Current(c)
ちなみに、このようなネストした strcut を Datastore に突っ込むと、そのプロパティは平坦化される(さきほどのスクショの2枚目みたいに)。これについては GAE/Go Datastore特有の機能~構造化プロパティ~ - The Round が詳しいので参照されたし。
DTO(Data Transfer Object)
お手本では slim3 の model として作成しているけど、こっちは dto
というディレクトリを掘ってそこに定義してやってみることにした。
とりあえずこの章に関して言えば支障はなさげ。
ログイン状態&admin権限を必要とするパスの指定方法
お手本・Javaだと web.xml の security-constraint 要素に指定するやつは、 gae/g だとどうなるのか、だけど、 app.yaml Reference | App Engine standard environment for Go | Google Cloud の通りにやれば大丈夫っぽい。app.yaml に書くので、 gae/py も同じ書き方なのかも。
今回はこんな感じ。
関係ないけど、今回のこの写経は東京へ戻るための新幹線の待ち時間にしてたんだけど、岡山駅で WiMAX 2+ がバリバリ掴めたのには驚いた! まじで「大都会」に近づきつつあるのかも!