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

时间:2018-03-22 12:35:46

标签: ruby-on-rails reactjs react-redux jwt devise-token-auth

我正在使用devise_token_auth使用Rails 5 API和使用redux-token-auth的单独React / Redux应用,试图允许用户通过Twitter OAuth登录(使用omniauth-twitter)。< / p>

我在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. 用户被重定向到回调网址,即/api/v1/auth/twitter/callback,由Rails后端处理
  5. Oauth成功,用户信息被添加到users
  6. 然后什么也没发生。将显示一个空白页面,其中URL仍显示带有路径的后端Rails应用程序URL /api/v1/auth/twitter/callback
  7. 我需要的是让用户返回到React前端应用程序并使用刚创建的新用户的令牌进行身份验证。

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

    使用redux-token-auth时设置和配置devise_token_authomniauth的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

我只是在处理同一件事。您只需要重定向到身份验证后希望用户访问的URL。

因此将返回链接附加到您的auth链接上,像这样

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

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

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

然后您可以检查以确保r包含某些内容,如果要保存,则将其保存或传递给此方法最终重定向到的失败或成功状态。

还请记住将加密的令牌传递给前端。 This可以帮助您确定如何来回传递安全令牌。

更新

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

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

我想这就是您想要的。