4

我将devise_token_auth与 Rails 5 API 和使用redux-token-auth的单独 React/Redux 应用程序一起使用,试图允许用户通过 Twitter OAuth 登录(使用omniauth-twitter)。

我已devise_token_auth安装/api/v1如下:

1 │ Rails.application.routes.draw do 2 │ namespace :api do 3 │ scope :v1 do 4 │ mount_devise_token_auth_for 'User', at: 'auth', controllers: { omniauth_callbacks: 'omniauth_callbacks' } 5 │ end 6 │ end 7 │ end

这是现在发生的事情:

  1. 在 React 前端,用户单击链接以使用 Twitter 登录
  2. /api/v1/auth/twitter用户在同一窗口中被重定向到(在后端 Rails 应用程序中处理)
  3. 用户被重定向到 twitter.com 以登录和授权应用程序
  4. 用户被重定向到回调 URL,/api/v1/auth/twitter/callback由 Rails 后端处理
  5. Oauth 成功,用户信息被添加到users表中
  6. 然后什么也没有发生。显示一个空白页面,其 URL 仍显示带有路径的后端 Rails 应用程序 URL /api/v1/auth/twitter/callback

我需要用户返回 React 前端应用程序并使用刚刚创建的新用户的令牌进行身份验证。

我究竟做错了什么?我最初重定向到处理 oauth 流的后端 API 是错误的吗?我在 devise_token_auth 问题中看到了一些关于在新窗口中执行此操作的评论,但除了使用 jQuery 库jToker(我不想这样做)之外,我没有看到任何有关如何执行此操作的文档。

设置和配置redux-token-auth以及devise_token_auth使用时的正确方法是什么omniauth

4

1 回答 1

0

我只是在处理同样的事情。您只需重定向到您希望用户在身份验证后所在的 url。

因此,将返回链接附加到您的身份验证链接,这样说

http://www.acme.com/api/v1/auth/twitter?r=http://www.acme.com/dashboard

然后在您的回调函数中,您将在 request.env 对象中找到 r 参数。

request.env['omniauth.params']['r']

然后,您可以检查以确保 r 有某些东西,如果有,您希望保存它或将其传递到此方法最终重定向到的失败或成功状态。

还要记住将您的加密令牌传递给前端。可以帮助您弄清楚如何来回传递安全令牌。

更新

我也只是尝试将参数设置为“auth_origin_url”而不是我的自定义参数。

http://www.acme.com/api/v1/auth/twitter?auth_origin_url=http://www.acme.com/

我想这就是你要找的。

于 2018-07-05T06:43:53.073 回答