如何使用 redux-token-auth 设置 devise_token_auth 和 omniauth?
Posted
技术标签:
【中文标题】如何使用 redux-token-auth 设置 devise_token_auth 和 omniauth?【英文标题】:How to set up devise_token_auth and omniauth with redux-token-auth? 【发布时间】:2018-08-31 21:39:54 【问题描述】:我将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
这是现在发生的事情:
-
在 React 前端,用户单击链接以使用 Twitter 登录
用户被重定向到同一窗口中的
/api/v1/auth/twitter
(在后端 Rails 应用程序中处理)
用户被重定向到 twitter.com 以登录和授权应用程序
用户被重定向到回调 URL,即 /api/v1/auth/twitter/callback
,由 Rails 后端处理
Oauth 成功,用户信息被添加到users
表中
然后什么都没有发生。显示一个空白页面,其 URL 仍显示带有路径的后端 Rails 应用程序 URL
/api/v1/auth/twitter/callback
我需要用户返回 React 前端应用程序并使用刚刚创建的新用户的令牌进行身份验证。
我做错了什么?我最初重定向到处理 oauth 流的后端 API 是错误的吗?我在 devise_token_auth 问题中看到了一些关于在新窗口中执行此操作的 cmets,但除了使用 jQuery 库jToker(我不想这样做)之外,我没有看到任何有关如何执行此操作的文档。
在使用omniauth
时,设置和配置redux-token-auth
和devise_token_auth
的正确方法是什么?
【问题讨论】:
【参考方案1】:我只是在处理同样的事情。您只需要重定向到您希望用户在身份验证后所在的 url。
所以在你的授权链接上附加一个返回链接,这样说
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/
我想这就是你要找的东西。
【讨论】:
以上是关于如何使用 redux-token-auth 设置 devise_token_auth 和 omniauth?的主要内容,如果未能解决你的问题,请参考以下文章