大ちゃんの駆け出し技術ブログ

RUNTEQ受講生のかわいいといわれるアウトプットブログ

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バージョンです。

api.slack.com

これを導入するにあたり、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.rbdevise_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'

エラーメッセージで調べると下記記事にたどり着きました。

www.takayasugiyama.com

こちらを参考にすると、deviseがデフォルトだとOmniauth2に対応していないとのことです。よってbranchを指定して、Omniauth2に対応したdeviseのインストールが必要ということです。

gem 'devise', git: "https://github.com/heartcombo/devise.git",  branch: "ca-omniauth-2"

こちらをインストールすると、エラーメッセージがなくなりました!