2016年6月20日月曜日

【Rails4.2.6】deviseなしでGoogle Loginを実装する。

  • 公開日: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を入力します。

承認済みのJavaScript生成元

// for example
http://www.sample
http://dev.docker.sample

ローカル開発環境で確認する場合も、IPでなくドメインで指定する必要があります。
ドメインは、ローカルPCのhostsファイルに記述すればOKです。

続いて承認済みのリダイレクトURLを入力します。

リダイレクト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を修正します。

修正前

{project_folder}/Gemfile

# Use omniauth-google-oauth2 for google aut
gem "omniauth-google-oauth2"
gem "omniauth-oauth2", '~> 1.3.1'

bundleを使ってinstallします。

terminal

bundle install

インストールが正常に完了したら、実装を行います。

実装

omniauthのcallbackを受け取るコントローラーを作成します。

terminal

bundle exec rails generate controller omniauth_callbacks

ルートを設定します。

{project_folder}/Gemfile

  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で記載してある値を設定します。

config/initializers/omniauth.rb

# invalid_omniauth.rb
Rails.application.config.middleware.use OmniAuth::Builder do
  provider :google_oauth2, ENV["GOOGLE_CLIENT_ID"], ENV["GOOGLE_CLIENT_SECRET"]
end

失敗時の処理

config/initializers/omniauth.rb

# 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
}

ルートの設定

{project_folder}/routes.rb

  scope "(:locale)", locale: /ja|en/ do
    get "/auth/failure" => "sessions#failure"
  end

あとは、facebookやtwitterのログインと同じように登録、ログイン処理を記述すればOKです。

まとめ

Railsのomniauth-google-oauth2の記事は少ないので、実装には手間どるかもしれません。

この記事は忘備録も兼ねて、定期的に更新していきたいと思います。

以上。

PICK UP オススメ書籍

運営サイト(railsで作成しています)

関連記事

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

0 件のコメント:

コメントを投稿

Related Posts Plugin for WordPress, Blogger...