ラーメンを食べて生活したい

ラーメン好きの技術ブログ

Devise+Twitterのログイン

環境


やり方

  • 以下のGemを入れる
 gem 'devise'
 gem 'omniauth-twitter'
 gem 'omniauth'
  • 次に、以下のコマンドを実行
> rails g devise:install

> rails g devise User
 
  • db/migrate/***_devise_create_users.rbの以下を編集し、
    rails db:migrateを実行
      ## Database authenticatable
      t.string :provider, null: false
      t.string :uid, null: false
      t.string :image, null: false
      t.string :name, null: false
    
      ## Rememberable
      t.datetime :remember_created_at
      t.string :remember_token
      
      # 適度にindexを追加
      add_index :users, [:provider, :uid, :name], unique: true
  • app/models/user.rbを下記のように編集
devise :rememberable, :trackable, :omniauthable
  • app/controllers/users/omniauth_callbacks_controller.rbを作成
class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController
  include Devise::Controllers::Rememberable

  def twitter
    auth = request.env['omniauth.auth']
    
    user = User.find_or_create_by(
      provider: auth.provider,
      uid: auth.uid,
      name: auth.info.name
    )
   
    remember_me(user)
    
    sign_in_and_redirect user, event: :authentication
  end
end
  • ルーティングを編集するconfing/routes.rb
  devise_for :users, controllers: {
    omniauth_callbacks: 'users/omniauth_callbacks'
  }

  devise_scope :user do
    delete :sign_out, to: 'devise/session#destroy', as: :destroy_user_session
  end
  • APIを挿入する
config.omniauth :twitter, 'API', 'secret'
  • Viewsにこれを挿入する
<% if user_signed_in? %>
  <%= link_to 'Sign out', destroy_user_session_path, method: :delete %>
  <%= current_user.name %>
  <img src="<%= current_user.image %>" width="30px" height="30px" />
<% else %>
  <%= link_to 'Sign in', user_twitter_omniauth_authorize_path %>
<% end %>

読みづらいけどこんな感じにできました


参照元post.simplie.jp