で動作するようには思えません Doorkeepers AccessTokenコントローラをオーバーライドする責任のコードは、特定の環境ではない、まだそれが生産にローカルではなく、作品Herokuの
require 'api_constraints'
Rails.application.routes.draw do
use_doorkeeper do
controllers :tokens => 'access_token'
end
# Other routes
end
上記しかし本番では、ローカルサーバー上で正常に動作します
routes.rbを最初のルートに示すように、守衛トークン応答は[Herokuのは]これは無視しているようだし、代わりにdoorkeepeをデフォルトにルーティングされます明白な理由のないクラスです。したがって、トークンによる応答にはユーザーIDは含まれません。
REQUEST TO "https://myapp.herokuapp.com/oauth/token"
POST /oauth/token HTTP/1.1
Host: myapp.herokuapp.com
Cache-Control: no-cache
Postman-Token: xxxxxxxx
Content-Type: application/x-www-form-urlencoded
grant_type=password&email=john%40gmail.com&password=password
これは、JSONのレスポンスを返します:
{
"access_token": "XXXXXX",
"token_type": "bearer",
"created_at": 1466340696
}
同じ要求が "http://localhost:3000/oauth/tokenは" 正しく含まUSER_IDと
{
"access_token": "XXXXXX",
"token_type": "bearer",
"created_at": 1466341435,
"id": 1
}
を返します。私は、プロダクションサーバが古いルートファイルを使用するようなキャッシュ問題があるかどうかはわかりません。私はdynosを再起動し、herokuマスターに更なる変更を加えようとしましたが、これで問題は解決されませんでした。混乱のため
class AccessTokenController < Doorkeeper::TokensController
# Overriding create action
# POST /oauth/token
def create
response = strategy.authorize
body = response.body
if response.status == :ok
# User the resource_owner_id from token to identify the user
user = User.where(response.token.resource_owner_id).first rescue nil
unless user.nil?
### If you want to render user with template
### create an ActionController to render out the user
# ac = ActionController::Base.new()
# user_json = ac.render_to_string(template: 'api/users/me', locals: { user: user})
# body[:user] = Oj.load(user_json)
### Or if you want to just append user using 'as_json'
body[:id] = response.token.resource_owner_id
end
end
self.headers.merge! response.headers
self.response_body = body.to_json
self.status = response.status
rescue Doorkeeper::Errors::DoorkeeperError => e
handle_token_exception e
end
end
access_token_controller謝罪し、これにどのような援助のため、事前に感謝します。
のバージョンの作業
は、あなたがあなたのHerokuのマシンに対応する 'User'を持っていますか? – Uzbekjon
こんにちは@Uzbekjon、はい私は確信しています。私はユーザーアカウントで正常にログインすることができますが、JSON APIを使用してアクセストークンを取得することもできますが、localhostのJSONレスポンスだけが 'id'パラメータをアタッチするだけで、herokuはこれまでの3つのフィールド私のコードの。 –
@Uzbekjonユーザーはマシンに存在していましたが、 'user = User.where(response.token.resource_owner_id).first rescue nil'で割り当てられていないようです。 –