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 %>
読みづらいけどこんな感じにできました