【问题标题】:Rails Devise invitable invitation link isn't workingRails Devise 邀请链接无效
【发布时间】:2021-05-17 19:25:19
【问题描述】:

所以我有 2 个应用程序应该一起工作。我有 app1,这是一个只有我们的员工才会使用的应用,而 app2 是一个 customer_portal 应用,客户可以在其中登录并支付余额。我正在努力做到这一点,以便在 app1 中我们可以创建一个客户帐户并将其链接到特定客户。此过程将使用 devise_invitable 为 app2 创建一个帐户,并通过电子邮件向所选客户发送一个链接以设置其门户应用程序(仅接受邀请),但由于某种原因,邀请链接不起作用,只是重定向到主页.所以基本上app2不能注册账号,必须通过app1创建账号并通过email发送给客户。

我从某人那里听说只有在 URL 不正确时才应该重定向。但它是通过邀请函数生成的 URL

PortalUser.invite!({:name => params[:name], :email => params[:email]}, current_user)

自动通过电子邮件发送此链接 http://localhost:3000/portal_users/invitation/accept.20?invitation_token=p7UKK8Z8nKn4busWerpx

我还可以选择重新发送邀请电子邮件,以防客户请求但发送相同的电子邮件链接

PortalUser.find(params[:id]).deliver_invitation

我能想到的一件事是,如果 2 个不同的应用程序的加密-解密密钥不同,那么当 app2 尝试解密令牌时,它看起来就像是错误的令牌。如果是这种情况,您知道我将如何更改这些键以匹配吗?或者更确切地说,为 app1 提供 app2 的加密密钥,并告诉 devise 将该加密密钥用于所有邀请或 app2 的帐户。

编辑: 所以我发现我可以在 config/initializers/devise.rb 中分配一个 secret_key,如果两个应用程序使用相同的密钥,它就可以工作。但是,我还有一个问题,这样做是否会带来安全问题?

【问题讨论】:

    标签: ruby-on-rails devise devise-invitable


    【解决方案1】:

    “这样做会带来安全问题吗?” - 在某种程度上,存在安全问题。例如,任何登录到一个应用程序的人都可以访问另一个应用程序。听起来一个应用程序是后端或管理应用程序,另一个是面向消费者的应用程序。登录其中一个不应授予另一个访问权限。

    可能还有另一种更好的方法。您可以创建在页面加载时处理的一次性使用令牌。它可以登录用户并允许他们完成注册过程。

    编辑:

    您可以创建一个可用于登录的令牌。

    token = SignInToken.find_by(token: token)
    user = token&.user
    sign_in(user, scope: :user) if user
    

    参考:Devise Wiki

    【讨论】:

    • 应用使用不同的表来存储账户信息。一个应用程序上的帐户无法登录另一个应用程序。我想知道他们拥有相同的密钥是否会成为问题。
    • 这取决于会话中存储的内容。如果它使用用户 ID,那么拥有一个 cookie 的一个应用程序可以访问另一个应用程序。它还取决于哪个会话存储。这听起来是个坏主意,会产生更多问题。
    • 有没有不同的方法让它工作而不让它们拥有相同的密钥?
    • 我认为可能有一种方法可以让用户登录。然后,您可以创建一次性令牌并将其通过电子邮件发送给用户。这将与设计邀请具有相同的功能,但使用不同的令牌。请参阅编辑发布。
    猜你喜欢
    • 2014-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-02
    • 2011-12-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多