如何使用redux-token-auth设置devise_token_auth和omniauth?

4
我正在使用 devise_token_auth 和 Rails 5 API,以及一个独立的 React/Redux 应用程序redux-token-auth,尝试允许用户通过 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(我不想这样做)。

当使用omniauth时,设置和配置redux-token-authdevise_token_auth的正确方法是什么?

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/

我想这就是你在寻找的内容。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接