認証機能(Devise/Facebook)
Facebookログイン機能を実装します。
Facebook Developer登録
Facebookログインを行うため、アプリケーション登録を済ませておいてください。
Facebookにログインした状態で https://developers.facebook.com にアクセスします。
My Appsから「Add a New App」ボタンでアプリケーション登録を行います。プラットフォームにはウェブサイトを選択します。
App ID、カテゴリを設定し、アプリケーションを登録します。Site URLには http://localhost:3000 を設定します。
画面をリロードし、My Appsから作成したアプリケーションを選択すると、ダッシュボードが表示されます。ここにApp IDとApp Secretがあり、これらを利用してFacebookログインを行います。
OmniAuth Facebookの導入
OmniAuth Facebookのgemをインストールします。
Gemfileをエディタで開き、この行の後に
gem 'omniauth-twitter'
この行を追加します。
gem 'omniauth-facebook'
gemをインストールします。RAILS_ROOTでbundle installを実行します。
bundle install
Facebook認証の設定
https://developers.facebook.com で、ダッシュボードから作成したアプリケーションの情報を表示します。
- App ID
- App Secret
config/secrets.ymlにFacebook認証で利用するKeyを追加します。Twitterの設定の後にFacebookの設定を追加します。これらの行のあとに
default_twitter: &default_twitter
twitter_api_key: (API Keyの値)
twitter_api_secret: (API Secretの値)
これらのコードを追加します。
default_facebook: &default_facebook
facebook_api_key: (App IDの値)
facebook_api_secret: (App Secretの値)
development: と test: のTwitter設定の後にFacebook認証の情報を追加します。
development:
secret_key_base: 9cbxxxxx617b21163a7d31f1280e6973a62ea0a21a98e233173dd29ccde7809ea3eef72d9e220216b3e2fea1a82b7013c632a89f0acf4b8f77713e7d9528fc8b
<<: *default_twitter
<<: *default_facebook
test:
secret_key_base: 4fbxxxxx4de9c47525a3365728fca18fa5e4401aeff049b8c7a3a624e828ebc2aa94d53693a5a01f348d1abd33e363e4fbb3da84742702be431c39e569b1881b
<<: *default_twitter
<<: *default_facebook
本番環境では環境変数からFacebook認証の情報を取得するようにします。この行のあとに
twitter_api_secret: <%= ENV["FACEBOOK_API_SECRET"] %>
この行を追加します。
facebook_api_key: <%= ENV["FACEBOOK_API_KEY"] %>
facebook_api_secret: <%= ENV["FACEBOOK_API_SECRET"] %>
config/initializers/devise.rbで、Facebook認証で利用するKeyを設定します。この行のあとに
Rails.application.secrets.twitter_api_secret
これらのコードを追加します。
config.omniauth :facebook,
Rails.application.secrets.facebook_api_key,
Rails.application.secrets.facebook_api_secret
Facebook認証処理の実装
app/controllers/users/omniauth_callbacks_controller.rb をエディタで開きます。これらの行のあとに
def twitter
callback_from :twitter
end
これらのコードを追加します。
def facebook
callback_from :facebook
end
app/models/user.rbをエディタで開きます。self.find_or_create_from_oauthメソッドを以下のように書き換えます。
def self.find_or_create_from_oauth(auth)
User.find_or_create_by(provider: auth.provider, uid: auth.uid) do |user|
user.user_name = auth.info.nickname || auth.info.name
user.avatar_url = auth.info.image
user.email = User.dummy_email(auth)
user.password = Devise.friendly_token[0, 20]
end
end
ログインを行うためのリンクを追加します。
app/views/layouts/application.html.erbをエディタで開きます。この行のあとに
<%= link_to 'Twitter login', user_omniauth_authorize_path(:twitter) %>
この行を追加します。
<%= link_to 'facebook login', user_omniauth_authorize_path(:facebook) %>
サーバーを起動し、ログインできるか確認します。
rails s
ログイン後にユーザーが作成されているか確認します。サーバーを起動したターミナルとは別のターミナルで、Railsコンソールを起動します。
rails c
コンソールで最後のユーザを取得します。
User.last