13

我有一个桌面应用程序和一个移动应用程序。我想对两个“设备”使用相同的 rails 应用程序。换句话说,我希望移动应用程序请求桌面应用程序上的内容。

我使用 Devise 进行身份验证(电子邮件 + 密码)。我已经在桌面应用程序上实现了 Doorkeeper,以便为我的移动应用程序生成 Oauth2 令牌。

以下是我的问题:

我的桌面应用程序控制器中有 before_filters 集以保护它们。

  • 我不确定移动应用程序应如何与 Devise 共享 OAuth2 令牌以进行身份​​验证并访问我的受保护控制器?

事实上,现在应该由 Doorkeeper 使用doorkeeper_for :all代码检查我的控制器中的移动令牌。但要做到这一点,我必须无法设计保护before_filter :authenticate_user!......

我也应该在设计中保存 oauth 令牌吗?

我误解了移动应用程序应该如何使用设计和 OAuth2 协议进行身份验证?

谢谢

4

2 回答 2

11

这是旧的,但还没有答案。

本质上,Devise 和 Doorkeeper 做同样的事情,Devise 使用会话(或令牌身份验证,如果您已启用)进行身份验证,而 Doorkeeper 使用在每个请求中发送的 OAuth 令牌进行身份验证。

您可能想要做的是将您的应用程序拆分为两个访问点,使用 Devise 进行常规桌面访问,并使用 Doorkeeper 进行 API。仅为常规桌面控制器启用设计路由,并仅为 api 控制器启用门卫路由。

在您的 API 应用程序控制器中,您可以将 current_user 覆盖为类似User.find(doorkeeper_token.resource_owner_id) if doorkeeper_token. 这也将匹配 Devise 的身份验证方式。

或者,如果您的 API 不必使用 OAuth,您可以使用 Devise 的 token_authenticable 配置,它提供与 OAuth 的承载令牌类似的功能。

于 2013-05-06T19:38:30.607 回答
0

我不确定我是否理解您的问题,但 Doorkeeper 完全锁定了您的控制器。doorkeeper_for :all如果您的控制器中有,则无法通过 Devise 身份验证进行访问。

您将需要一个单独的控制器来通过 OAuth2 共享您的数据,例如 API 控制器。然后您可以请求数据,例如通过protocol://myapp:1234/ressource?access_token=thetoken.

那是你要求的吗?否则请澄清:)

于 2012-08-01T08:20:44.243 回答