ruby-on-rails - API模式下Doorkeeper如何处理OAuth流程?

标签 ruby-on-rails reactjs oauth-2.0 single-page-application doorkeeper

场景很简单:

  • 一个 Rails API-only 服务器,带有 Doorkeeper 供应商
  • 一个移动应用和一个SPA(比方说React),用户想要使用电子邮件和密码注册和登录

当你有一个普通的 Rails Stack 时,你需要定义一个 authorizeUrl 用户被重定向以提供他们的凭据并返回到具有 authorizationCode 的网络/移动应用程序。在 API 模式下,基本上您的“authorizeUrl”位于同一个应用程序中。

当您的提供商无法提供登录页面(因为它是仅 API 服务器)时,处理 OAuth 流程的合适方法是什么

最佳答案

您必须在 React 中构建一个登录表单,该表单发送一个 HTTP POST 请求以获取 OAuth token ,比如在/oauth/token 上,其中包含用户输入的凭据(在请求正文中,与客户端 ID/密码一起(取决于您的 OAuth 服务器配置)。

然后在响应时您将获得一个访问 token ,您可以将其添加到每个后续请求的授权 header 中,以便您的服务器知道其合法请求。

通常,如果您使用 Axios作为 HTTP 客户端,可以使用拦截器将访问 token 添加到每个请求(如此处解释:https://medium.com/swlh/handling-access-and-refresh-tokens-using-axios-interceptors-3970b601a5da)。

这是“标准”OAuth 工作流程,我不确定您的后端堆栈是否暗示了一些关于身份验证的自定义,但看起来这个工作流程仍然有效。

关于ruby-on-rails - API模式下Doorkeeper如何处理OAuth流程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62236940/

相关文章:

ruby-on-rails - 如何缓存对象的 JSON 表示?

javascript - 重新渲染之前最初显示的登录页面 - Reactjs

javascript - 类型错误 : Cannot read property 'map' of undefined react component

facebook - 使用 Facebook 应用程序 access_token 通过 Graph API 获取有年龄限制的页面数据?

encryption - Bearer token (OAuth2) 是如何创建的?

ruby-on-rails - 如何更改 Redmine 3.x 中的默认登录页面?

ruby-on-rails - Rails/Ruby - 如何检查用户下载和上传速度?

javascript - 在 React 中使用 EventListener 和 postMessage 从弹出窗口传递数据

ruby-on-rails - 部署到 Heroku:ExecJS::RuntimeError: SyntaxError: Unexpected token

javascript - ReactJS 这个.state