2012-07-13 76 views
12

我有一個桌面應用程序和一個移動應用程序。我想爲兩個「設備」使用相同的rails應用程序。換句話說,我希望移動應用程序在桌面應用程序上請求內容。使用Devise,Gatekeeper和OAuth2令牌的API和應用程序認證

我使用設計認證(電子郵件+密碼)。 我已在桌面應用程序上實施Doorkeeper,以便爲我的移動應用程序生成Oauth2令牌。

這裏是我的問題:

我before_filters套在我的桌面應用程序控制器,以確保他們。

  • 我不確定移動應用程序應該如何與Devise共享OAuth2令牌以進行身份​​驗證並訪問受保護的控制器?

實際上,現在是門衛應該在我的控制器中用doorkeeper_for :all代碼檢查移動令牌。但要做到這一點,我必須無法設計保護before_filter :authenticate_user! ...

我應該在設計中保存oauth標記嗎?

我誤解了移動應用程序應如何使用devise和OAuth2 protocole進行身份驗證?

THX

回答

9

這是舊的,但還沒有答案。

本質上設計和門衛正在做同樣的事情,設計認證使用會話(或令牌認證,如果你已經啓用),而門衛認證與每個請求發送的OAuth令牌。

您可能想要做的就是將您的應用程序分成兩個接入點,使用Devise進行常規桌面訪問以及使用Doorkeeper的API。僅爲常規桌面控制器啓用設計路線,並僅爲api控制器啓用門衛路線。

在您的API應用程序控制器中,您可以覆蓋current_user類似User.find(doorkeeper_token.resource_owner_id) if doorkeeper_token。這將符合設計認證的方式。

或者,如果您的API不必使用OAuth,則可以使用Devise的token_authenticable配置,該配置提供與OAuth的承載令牌類似的功能。

+0

爲什麼我們不應該在桌面和移動設備上使用基於令牌的身份驗證? – lakesare 2016-01-27 14:46:51

0

我不知道如果我理解你的問題,但看門人完全鎖定您的控制器。如果您的控制器中有doorkeeper_for :all,則無法通過設計認證進行訪問。

您將需要一個單獨的控制器來通過OAuth2共享您的數據,例如API控制器。然後您可以請求數據通過protocol://myapp:1234/ressource?access_token=thetoken

這就是你要求的嗎?否則請澄清:)