今回は認証機能を実装するときに使われるgomniauth というライブラリについてまとめてみたいと思います。
このライブラリを使用することで、Googleなどの正式プロバイダに登録しているアカウントを利用して、自分のアプリに認証機能を実装することが出来るようになります。
詳しい内容は以下のドキュメントを参照してください。
https://github.com/stretchr/gomniauth/blob/master/README.md
以下で使われている個人プロジェクトのソースコードは以下にあります。(まだ完成していないのですが。。。)
https://github.com/twan65/go-chat
ライブラリのインストール
$ go get github.com/stretchr/gomniauth
- ライブラリを使用するにはインストールする必要があります。
- 上記のコマンドを入力して実行します。
gomniauth情報セットアップ
gomniauth.WithProviders(
google.New("key", "secret", "callback"),
)
- 上記のようにWith Providersを使ってセットアップします。
- key:GoogleのクライアントID(Client ID)
- secret:Googleのクライアント。シィークリィトゥ(Client secret)
- callback:コールバックURLをセット

- 上記は自分のサイドプロジェクトの一部です。
- 起動時にセットを行うようにinitメソッドでセットアップしています。
- Client IDとClient secretはGitにコミットしたくないため、別途設定ファイルを作成してそれを参照しています。(設定ファイルは.gitignoreに登録)
認証ページへ遷移
provider, err := gomniauth.Provider("google")
- gomniauth.Provider() でプロバイダ・モデルを再度取得します。
authUrl, err := provider.GetBeginAuthURL(state, options)
- provider.GetBeginAuthURL:プロバイダ毎の認証ページへのurlを取得します。

- 上記は自分のサイドプロジェクトの一部です。
- provider変数にプロバイダがセットされています。
- 最後にhttpパッケージのRedirect関数を使って取得したauthURLを渡しています。
callbackハンドリング
provider, err := gomniauth.Provider("google")
- gomniauthを使用し、プロバイダ・モデルを生成します。
creds, err := provider.CompleteAuth(queryParams)
- 提供されたURLから、認証に必要な情報を抜き出します。
provider.GetUser(creds)
- プロバイダからコールバック結果(Userオブジェクト)を取得します。

- 上記は自分のサイドプロジェクトの一部です。
- 認証に必要な情報を抜き出したり、ユーザー情報を取得するときにエラーチェックも行っています。
- 取得したUserオブジェクトから宣言した構造体に値をセットして使っています。
終わりに
今回はGoの認証ライブラリについて調べてみましたが、業務では使ったことがなく2番目の個人のサイドプロジェクトですが、まだまだ勉強すべきのことが出ています。
いつも思うのですが、何かを勉強する時に基礎知識からやって最後にサイドプロジェクトをやってみるよりも
やりながら勉強する方法が個人的には楽しいですね。
