2014-01-28 406 views
5

我使用看門寶石門衛給401未授權

我的ApplicationController是這樣的:

private 
def current_resource_owner 
    Person.find(doorkeeper_token.resource_owner_id) if doorkeeper_token 
end 

我DemosController是這樣的:

doorkeeper_for :index 
respond_to :json 
def index 
    respond_with current_resource_owner 
end 

響應就這樣產生了:

Started GET "/?code=f88d2e95b1b286645d31772c395e0e36708a5i0p970836af640f631bb4f043b5" for 127.0.0.1 at 2014-01-28 11:10:56 +0530 
Processing by DemosController#index as HTML 
Parameters: {"code"=>"f88d2e95b1b286645d31135c395e0e36708a5b5b970836af640f631bb4f043b5"} 
Filter chain halted as #<Proc:[email protected]/home/xyz/.rvm/gems/[email protected]/gems/doorkeeper-1.0.0/lib/doorkeeper/helpers/filter.rb:8> rendered or redirected 
Completed 401 Unauthorized in 1ms (ActiveRecord: 0.0ms) 
+0

你有解決這個問題嗎?我收到了同樣的錯誤。 –

回答

0

你的respond_to也需要回應html的,因爲你正在請求「DemosController#指數作爲HTML」

respond_to :html, :json 
2

這實際上是對看門的一個問題。要對401未授權錯誤,而不是一個空白頁自定義JSON響應,在ApplicationController中我加:

def doorkeeper_unauthorized_render_options 
    {json: '{"status": "failure", "message":"401 Unauthorized"}'} 
end 
1

我不是100%肯定,如果我正確地理解你的問題。你的代碼看起來很好,但請求似乎是錯誤的。

與門衛你需要一個訪問令牌,而不是代碼參數來訪問資源(DemosController#索引)。所以首先你必須從授權碼中獲得訪問令牌。因此提出請求

GET "/oauth/token?code=...&grant_type=authorization_code&redirect_uri=...&client_id=...&client_secret=..." 

確保REDIRECT_URI與一個與你的客戶端應用程序註冊的一致,並添加正確的CLIENT_ID和client_secret請求。還要始終使用新的代碼參數。默認情況下,它僅在生成後10分鐘內有效。注意,在定製門衛路由的情況下,url(/ oauth/token)可能不同。

如果您正確完成請求,則響應將包含有效的訪問令牌。

然後發出GET請求到「/index.json?access_token = ...」而不是「/?code = ...」。 '.json'告訴Rails你的客戶可以處理JSON。否則,您將得到一個406響應,這意味着所請求的格式(默認爲HTML)不受支持。您也可以在HTTP標頭中發送Accept =「application/json」,而不是'.json'。

401未經授權的回覆,你目前收到的,意味着驗證信息(在你的情況下,一個有效的訪問令牌)是錯誤的或根本沒有。

希望有所幫助。