前回 から引き続き。
とりあえず認証のリダイレクトが機能しつつ、 Credentials を NDB に保存できるところまで。
コード
views.py
で client_secrets.json
というファイルをロードしてるので
それは別途プロジェクトのルートディレクトリに置いておく。
{ "web": { "client_id": "[YOUR_CLIENT_ID_HERE]", "client_secret": "[YOUR_CLIENT_SECRET_HERE]", "redirect_uris": [], "auth_uri": "https://accounts.google.com/o/oauth2/auth", "token_uri": "https://accounts.google.com/o/oauth2/token" } }
注意点など
redirect_uri_mismatch エラー
client_id, client_secret は正しいのに
authorize_url
にリダイレクトした時に以下のような 400 エラーが起きる場合
Error: redirect_uri_mismatch
調べてみるとリダイレクトURIは developer console でちゃんと登録しないとだめだったらしい。
参考: authentication - Google OAuth 2 authorization - Error: redirect_uri_mismatch - Stack Overflow
ので、
[https://console.developers.google.com/project/[プロジェクト名]/apiui/credential](https://console.developers.google.com/project)
から設定。
承認済みの JAVASCRIPT 生成元 は今回関係ないはず
OAuth2WebServerFlow は結局使わなかった
Flow
オブジェクトを生成するところ、以下のように OAuth2WebServerFlow
クラスを使ってもいいけど
import settings FLOW = OAuth2WebServerFlow( client_id=settings.CLIENT_ID, client_secret=settings.CLIENT_SECRET, redirect_uri='http://localhost:8080/task_manager/oauth2callback', scope=settings.SCOPE)
これだと settings.py
に client_secret 埋め込むことになって public repository に置けなかったので
flow_from_clientsecrets()
で client_secrets.json
を読み込む形にした。
(client_secrets.json
は .gitignore
で管理)
TODO
StorageByKeyName
の第二引数はエンティティ(ここでは Credentials を格納してる) の key name になる部分で、
本来ならば現在の Google Account ログインユーザー名を使う。
が、とりあえず Credentials がデータストアに保存されるところまでを確認したかったので、これからです。
(2015/01/29 追記)
続き、書きました。
[GAE][django]Google APIs Client Library for Pythonをdjangoで使う (3) - dackdive's blog