如何使用 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-authdevise_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?的主要内容,如果未能解决你的问题,请参考以下文章

JTable 如何使用 TableModel设置表头

如何设置和使用Log

如何使用 jQuery 设置 DropDownList 的文本?

如何使用曲线为 NSView 设置动画

如何使用 PlistBuddy 添加设置而不覆盖现有设置?

如何使用 UITabbarsystemitem 设置标题