Rails4でOmniauthを使って、Facebookログインを実装する
Rails4でOmniauthを使って、Facebookログインを実装
Omniauth概要
今回の目的
- 簡単にFacebookログインを実装する
作業
- facebookアプリの設定(30min)
- Gemfileの設定(2min)
- modelの作成(30min)
- controllerの作成(20min)
- routeの設定(20min)
- viewの作成(2min)
facebookアプリの設定
- Home - Facebook Developersで、ディベロッパー登録を行う
- ヘッダー部の「Apps」をクリックする
- 新しいAppを作成する
- Website with Facebook Loginに自分のサイトのurlを登録する
- 「App ID」「App Secret」を控えておく
modelの作成
- Userモデルにuid, provider, tokenカラム(string)を追加
rails g model User provider uid token
- userが登録されているか判定するメソッドを定義する
class User < ActiveRecord::Base
def self.find_or_create_by_auth(auth)
user = User.where(["provider = ? and uid = ?", auth,provider, auth,uid])
if user.blank?
user = User.new
user.provider = auth.provider
user.uid = auth.uid
user.token = auth.credentials.token
user.save!
end
user
end
end
controllerの作成
- sessionを設定するためのactionをsession_controllerに定義する
class SessionsController < ApplicationController
def create
auth = request.env["omniauth.auth"]
user = User.find_or_create_by_auth(auth)
session[:user_id] = user.id
redirect_to root_url
enddef destroy
session[:user_id] = nil
redirect_to root_url
end
end
routeの設定
# welcome#indexをルートに設定する
root "welcome#index"
# facebookのログイン・認証が完了した後のリダイレクト先(auth/facebook/callback)とsession#createを紐づけ
match 'auth/:provider/callback', to: 'session#create', via: [:get, :post]
# facebookのログイン・認証が失敗した後のリダイレクト先(auth/failure)とrootを紐づけ
match 'auth/failure', to: redirect('/'), via: [:get, :post]
# signout_urlとsession#destroyを紐づけ
nmatch 'signout', to: 'session#destroy', as: 'signout', via: [:get, :post]
成果物
結果・感想
- 簡単にログインを実装できた
- いろいろな情報を取得することができるので、どこまで自分が必要なのか?を判断すること。DBの設計が大変(特にlogin_id, passwordの基本的な認証との共存)
- うまいことやってくれるので、仕組みを理解したい人は、下記リンクなどを参考にするとよいと思う
- 第1回 OAuthとは?―OAuthの概念とOAuthでできること:ゼロから学ぶOAuth|gihyo.jp … 技術評論社