ハンズオン資料の修正
ハンズオンで説明させていただきました。
にご参加いただき、ありがとうございました。 OAuthを利用したサービスの構築のハンズオンの説明させていただきました 内容は「GAE上でGmailのラベルデータにアクセスする」というものでした。
何点か修正点がありましたので、資料の変更点などをくわえました。 誤字、脱字書き間違いについても修正していますが、そのあたりはこの記事では言及せずに、ハンズオン時に問題になった点やなぜそうなるのか?という点をくわえておきたいと思います。
サンプルとして全言語を用意しましたが、ハンズオン会場はみんなGo言語だったので、言語的な部分の修正点はGo言語のみになっています。他の言語でも何か起こるんだろうな。。。
go-talks.appspot.com/github.com/shizuokago/handout/20160925/oauth.slide
CallbackURLの設定
単純な書き間違いだったのですが、nuki_ponさんからも指摘があった通りだったのでその辺りを書いておきたいと思います。 ※逆に資料としてはURLを変更しただけになります。
言語毎にバージョンを区切っていたので
https://xxxx.kneetenzero.appspot.com/ xxxx->go,php,python,java
としていたのですが、バージョン名でHTTPSアクセスした場合にはエラーが発生し、このURLは使用できません。GAEのSSL証明書が「*.appspot.com」で設定されているので、当然効かないですね。失礼しました。
https://xxxx-dot-kneetenzero.appspot.com/ xxxx->go,php,python,java
「.」が「-dot-」になります。
cloud.google.com/appengine/docs/go/config/appref#handlers_secure
ここのsecureの項の最後の方に書いてあります。 逆に「.」区切りはHTTPしかなかった時の名残でございます。HTTPSにしたほうがいいですね。
CallbackURLの直書き
Goのソース内にリダイレクト先のURLをそのまま書いてました。
RedirectURL: "http://go.kneetenzero.appspot.com/callback",
RedirectURL: "https://" + r.Host + "/callback",
がいいですね。s0kam0さんサンクスです。 ・・・このソースを見てずっとHTTPアクセスしてたんだな。としみじみ。
GOPATHの設定
GOPATHの設定を書いてなかったので書いておきました。 ハンズオンではここで簡易的にローカル(src下)にGOPATHを設定して、デプロイに失敗してしまいました。
GAE/Go(他の言語でも似たようなことは禁止されています)ではunsafeパッケージとsyscallパッケージは使えません。 これはポインタを触るような時とシステムのコマンドを呼び出すような時に使うパッケージです。
ローカル(src下)にgo get をしてしまうと、関連するパッjjjjjケージのソースが全部おかれてしまい、すべてがビルド対象になります。これによりデプロイでエラーを起こしてしまいます。GAEでは基本的にローカルファイルの書き出しなどを禁止している為、このようなことが起こります。
プロジェクト作成時の手順
プロジェクトを作成して初めてCredentialsを作成する際のUIを説明として飛ばしていたので追記しました。 失礼しました。
デプロイ時のコマンド
みんなGoだったので割愛したのですが、懇親会で質問いただいたのでちょっと書いておきます。 それぞれの言語のマニュアルで読むと
- go = goapp
- python = gcloud
- PHP = gcloud
- Java = mvn
でデプロイしています。 各言語のSDKで推奨しているのはあるのですが、今回のサンプルに限って言えばgo,python,PHPのデプロイはすべてgoappでできちゃいました。Javaに至ってはeclipseでそのままデプロイしたので、実質なんのコマンドかは不明な状態です(mavenではないと思う)
その時代でいきなりデプロイの方式などが変わったりしますので、実質どれが正しいかは私には判断しかねますが、、、通常でいけばマニュアル通りにデプロイした方が良いと思います。
サンプルコードの注意点
認可画面にリダイレクトする時のURLを注意深くみたのですが、client secretが混ざるという大変いくない状態になっています。このサンプルは画面から渡しているのでpost下値がそのまま入ってしまっている現象だと思いますが、みなさんは十分注意してください。
もし実際に使うようなことがある場合はURLを取得した後に設定するように注意してください。(Callback時に設定しても大丈夫)
最後に
作成したプロジェクトは使わないのであれば、削除しておきましょう。
なお使ったサンプルソースも一応修正をかけています。masterブランチはgoと同等になり、今後Goの勉強会で使う予定でいます。※一応goブランチは現状でストップする予定です