@znz blog

ZnZ の memo のようなもの

doorkeeper gem を 1.4 系から 2.0 系にアップデートした

| Comments

doorkeeper gem がメジャーバージョンアップして非互換があったので、 対応したときのメモです。

対象バージョン

  • rails 4.1.8
  • doorkeeper 1.4.0 から 2.0.1

変更点確認

CHANGELOG.md にまとまっていたので、参考にしました。

セキュリティアップデートも含まれるようなので、 2.0 系にあげられないときは 1.4.1 にあげておくのが良さそうです。

doorkeeper_for の書き換え

doorkeeper_for :allbefore_action :doorkeeper_authorize! に書き換えました。

1
2
3
4
-    doorkeeper_for :all
-    respond_to     :json
+    before_action :doorkeeper_authorize!
+    respond_to    :json
1
2
3
4
5
6
-    doorkeeper_for :index,  :show,   scopes: %w"public"
-    doorkeeper_for :create, :update, scopes: %w"admin write"
+    before_action -> { doorkeeper_authorize! :public }, only: [:index, :show]
+    before_action only: [:create, :update] do
+      doorkeeper_authorize! :admin, :write
+    end

config/initializers/doorkeeper.rb の更新

rails g doorkeeper:install で生成し直して変更していた部分を再適用しました。

  • resource_owner_authenticatordevise との連携
  • scope 関連
  • 認可の画面のスキップ
  • 動的な query parameter の許可
1
2
3
4
5
6
7
8
9
10
11
12
  resource_owner_authenticator do
    current_user || warden.authenticate!(scope: :user)
  end

  default_scopes  :public
  optional_scopes :admin, :write

  skip_authorization do |resource_owner, client|
    true
  end

  wildcard_redirect_uri true

config/locales/doorkeeper.en.yml の更新

rails g doorkeeper:installconfig/initializers/doorkeeper.rb と一緒に更新されていました。

認可の画面をスキップしている関係で、翻訳はせずに en を ja に置き換えただけで そのまま使っていたので、同様に置き換えてそのまま使いました。

redirect urimust be an HTTPS/SSL URI. 対策

テストの中で let!(:application) { Doorkeeper::Application.create!(name: 'MyApp', redirect_uri: 'http://api.test') } のようにしていると redirect urimust be an HTTPS/SSL URI. で失敗していたので、 https の URL に変更するか、 config/initializers/doorkeeper.rbforce_ssl_in_redirect_uri false にする必要がありました。

Missing column: applications.scopes

テストを実行したときに

[doorkeeper] Missing column: `applications.scopes`. If you are using ActiveRecord run `rails generate doorkeeper:application_scopes && rake db:migrate` to add it.

というメッセージが出るので、メッセージ通り rails generate doorkeeper:application_scopes && rake db:migrate で追加しました。

Comments