- 公開日:2016年06月20日
記事概要
RailsでGoogle Loginを実装する方法を記述した記事です。
deviseを使わないやり方になります。
環境
- rbenv
- bundler
- rails 4.2.6
- ruby 2.3.0
Google Developers Console
まずは、Google Developers ConsoleでGoogle Loginの設定を行います。
必要なのは3点で、
- プロジェクトの作成
- 認証情報の設定
- APIの設定
となります。
認証情報の設定
認証情報の設定は、プラットフォーム別におこないます。
Railsは、WEBアプリケーションの設定になります。
承認済みのJavaScript生成元には、Google Loginのボタンを配置するurlを入力します。
// for example http://www.sample http://dev.docker.sample
ローカル開発環境で確認する場合も、IPでなくドメインで指定する必要があります。
ドメインは、ローカルPCのhostsファイルに記述すればOKです。
続いて承認済みのリダイレクトURLを入力します。
// for example http://www.sample/auth/google_oauth2/callback http://dev.docker.sample/auth/google_oauth2/callback
/auth/google_oauth2/callbackは、railsのライブラリomniauth-google-oauth2を使う場合のおまじないです。
このまま使えば良いです。
APIの設定
Contacts APIとGoogle+ APIを有効にします。
Google Developers Consoleには用意されているAPIがたくさんありますが、検索窓に「Contacts」や「Google」の文字列を入力すると簡単に見つけることができます。
以上でGoogle側の設定は完了です。
omniauth-google-oauth2
RailsアプリでのGoogleの認証ツールには、omniauth-google-oauth2を利用します。
このライブラリを利用すろと、最小限の実装でGoogle認証を実装することができます。
Gemの追加
以下のようにGemfileを修正します。
修正前
# Use omniauth-google-oauth2 for google aut gem "omniauth-google-oauth2" gem "omniauth-oauth2", '~> 1.3.1'
bundleを使ってinstallします。
bundle install
インストールが正常に完了したら、実装を行います。
実装
omniauthのcallbackを受け取るコントローラーを作成します。
bundle exec rails generate controller omniauth_callbacks
ルートを設定します。
scope "(:locale)", locale: /ja|en/ do get 'auth/google_oauth2/callback', to: 'omniauth_callbacks#google_callback' end
auth/google_oauth2/callbackは承認済みのリダイレクトURLで設定した値です。
続いて、configを設定します。
config/initializers/omniauth.rbが存在しない場合は、ファイルから作成します。
Google Developers Consoleで記載してある値を設定します。
# invalid_omniauth.rb Rails.application.config.middleware.use OmniAuth::Builder do provider :google_oauth2, ENV["GOOGLE_CLIENT_ID"], ENV["GOOGLE_CLIENT_SECRET"] end
失敗時の処理
# invalid_omniauth.rb Rails.application.config.middleware.use OmniAuth::Builder do provider :google_oauth2, ENV["GOOGLE_CLIENT_ID"], ENV["GOOGLE_CLIENT_SECRET"] end # failure OmniAuth.config.on_failure = Proc.new { |env| OmniAuth::FailureEndpoint.new(env).redirect_to_failure }
ルートの設定
scope "(:locale)", locale: /ja|en/ do get "/auth/failure" => "sessions#failure" end
あとは、facebookやtwitterのログインと同じように登録、ログイン処理を記述すればOKです。
まとめ
Railsのomniauth-google-oauth2の記事は少ないので、実装には手間どるかもしれません。
この記事は忘備録も兼ねて、定期的に更新していきたいと思います。
以上。
0 件のコメント:
コメントを投稿