Site icon Amelt.net

Rails:Doorkeeperでパスワード認証する場合のサンプルコードとエラー対処方法

Amelt

Amelt

This post is also available in: 日本語 (Japanese)

Railsのgem Doorkeeper を使っていて、ローカル開発環境にてパスワード認証を行いたい場合の認証確認のサンプルコードと、"unsupported_grant_type"とエラーが出た場合の対処方法のメモです。

Doorkeeperでのパスワード認証のサンプルコード

1.rubyのコードから認証テストを実行

下記のコードを(例えば)doorkeeper-test.rbと保存します。
参考:https://github.com/doorkeeper-gem/doorkeeper/wiki/Using-Resource-Owner-Password-Credentials-flow

# doorkeeper-test.rb
require 'oauth2'

client_id     = 'somethingxxx' # your client's id generated with rake db:setup
client_secret = 'somethingxxx' # your client's secret
site          = "http://localhost:3000/" # your provider server, mine is running on localhost
user_email    = 'somethingxxx@amelt.net' 
user_password = 'somethingxxx'

client = OAuth2::Client.new(client_id, client_secret, :site => site)
token  = client.password.get_token(user_email, user_password)

token.get('/api/v1/somethingxxx.json') 

次に、保存した(例えば)doorkeeper-test.rbを、以下のようにコマンドラインから実行します。

cd "doorkeeper-test.rbが置いてあるフォルダ"
ruby doorkeeper-test.rb

2.curlコマンドからpostして認証テストを実行

もしくは、curlコマンドからpostして、Doorkeeperでのパスワード認証テストを行うこともできます。

curl -F grant_type=password \
-F username=somethingxxx@amelt.net \
-F password=somethingxxx \
-X POST http://localhost:3000/oauth/token

パスワード認証で"unsupported_grant_type"と出る場合の対処

下記のようなエラーの場合、次のように対処します。

{"error":"unsupported_grant_type","error_description":"The authorization grant type is not supported by the authorization server."}

config/initializers/doorkeeper.rb の Doorkeeper.configure do のループの"外側に"、以下の一行を追加します。

#config/initializers/doorkeeper.rb
Doorkeeper.configure do
end
Doorkeeper.configuration.token_grant_types << "password"