LoginSignup
10
9

More than 5 years have passed since last update.

RailsでFacebook認証を使う方法.(omniauth-facebookを使って)

Posted at

Facebook認証をRailsアプリに使う方法を簡単にまとめたいと思います.
使うgemは omniauth-facebookです.

開発環境

  • Rails
    • 4.1.0
  • Ruby
    • 2.0.0
  • omniauth-facebook
    • 1.6.0

それでは書いていきましょう!

Gemfileにgemを記載する.

gem 'omniauth-facebook'
$ bundle install

モデルを作ります!

モデルを作って,メソッド書きます.

$ rails g model User provider uid name token
$ rake db:migrate
models/user.rb
def self.create_omniauth(auth)
    where(auth.slice(:provider, :uid)).first_or_initialize.tap do |user|
        user.provider = auth.provider
        user.uid = auth.uid
        user.name = auth.info.name
        user.token = auth.credentials.token
        user.save!
end

セッションを管理するコントローラを作る

$ rails g controller Sessions

ルーティング!

config.routes.rb
get 'auth/:provider/callback', to: 'sessions#create'
get 'auth/failure', to: redirect('/')
get 'signout', to: 'sessiongs#destroy', as: 'signout'

sessionsコントローラにcreateメソッドとdestroyメソッドを追加する

sessions_controller.rb
def create
    user = User.create_omniauth(env['omniauth.auth'])
    session[:user_id] = user.id
    redirect_to root_url
end

def destroy
    session[:user_id] = nil
    redirect_to root_url
end

ログイン中のユーザの情報を取れるように...

application_controller.rb
helper_method :current_user

private
def current_user
    @current_user ||= User.find(session[:user_id]) if session[:user_id]
end

サインインとサインアウトリンクをビューに表示させる

layouts/application.html.erb
<% if current_user %>
    <%= link_to 'Sign out,', signout_path %>
<% else %>
    <%= link_to 'Sign in with Facebook', '/auth/facebook' %>
<% end %>

終わり

これでRailsアプリにFacebook認証でログインさせる事が出来ます.
ただこれだとログインしていなくてもログイン後に表示させたいページも見れるようになってるので気を付けてください.
その方法に関してはまた別の機会にでも書こうかと思います!

10
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
9