devise - You are using an old OmniAuth version, please ensure you have 1.0.0.pr2 version or later installed. (RuntimeError)の修正
deiviseでの外部認証の導入時
現在ポートフォリオ作成でsign in with slack
機能を実装しようとしています。twitterログイン等の外部リソースを用いた認証ログインのslackバージョンです。
これを導入するにあたり、deviseを使用しようと思いインストールしました。下記は一般的なインストール手順です。
devise
をインストール
# Gemfile gem 'devise'
bundle install ・ ・ Fetching responders 3.0.1 Using actionmailbox 6.0.3.5 Using rails 6.0.3.5 Using tailwindcss-rails 0.3.3 Installing orm_adapter 0.5.0 Installing warden 1.2.9 Installing responders 3.0.1 Fetching devise 4.7.3 Installing devise 4.7.3
$ bundle exec rails g devise:install create config/initializers/devise.rb create config/locales/devise.en.yml =============================================================================== Depending on your application's configuration some manual setup may be required: 1. Ensure you have defined default url options in your environments files. Here is an example of default_url_options appropriate for a development environment in config/environments/development.rb: config.action_mailer.default_url_options = { host: 'localhost', port: 3000 } In production, :host should be set to the actual host of your application. * Required for all applications. * 2. Ensure you have defined root_url to *something* in your config/routes.rb. For example: root to: "home#index" * Not required for API-only Applications * 3. Ensure you have flash messages in app/views/layouts/application.html.erb. For example: <p class="notice"><%= notice %></p> <p class="alert"><%= alert %></p> * Not required for API-only Applications * 4. You can copy Devise views (for customization) to your app by running: rails g devise:views * Not required * ===============================================================================
- デフォルトURLオプションを定義
# config/environments/development.rb config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }
- deviseでuserモデルを作成
$ rails g devise user
このコマンドでモデルを作成するとログイン認証をするためのファイルが自動で作成され、認証機能を使えるようになります。
それと同時にroutes.rb
にdevise_for :users
が追記されます。
# config/routes.rb Rails.application.routes.draw do devise_for :users
しかし、今回は外部認証を用いるのでルーティングは以下のようになるようです。
# config/routes.rb Rails.application.routes.draw do devise_for :users, controllers: { omniauth_callbacks: 'users/omniauth_callbacks' }
ここで一旦ルーティングを確認しようとすると下記エラーが表示されました。
$ rails routes ・ ・ ・ You are using an old OmniAuth version, please ensure you have 1.0.0.pr2 version or later installed. (RuntimeError)
解決方法
You are using an old OmniAuth version
「古いOmniAuthバージョンを使用しています」
とあるように、外部認証のgemであるOmniauth
のバージョンが古いと言われています。ですのでインストールしているOmniauthのバージョンを上げるのかと最初は思いましたが、自分のインストールしているgemでは新しいバージョンを使っていたので違うのかなと思います。
gem 'oauth2', '>= 1.4.4' gem 'omniauth-oauth2', '>= 1.4.0'
エラーメッセージで調べると下記記事にたどり着きました。
こちらを参考にすると、devise
がデフォルトだとOmniauth2
に対応していないとのことです。よってbranchを指定して、Omniauth2
に対応したdeviseのインストールが必要ということです。
gem 'devise', git: "https://github.com/heartcombo/devise.git", branch: "ca-omniauth-2"
こちらをインストールすると、エラーメッセージがなくなりました!