Rails 设计邀请 link 无效
Rails Devise invitable invitation link isn't working
所以我有 2 个应该可以协同工作的应用程序。我有 app1,这是一个只有我们的员工会使用的应用程序,而 app2 是一个 customer_portal 应用程序,客户可以在其中登录并支付余额。我正在努力做到这一点,以便在 app1 中我们可以创建一个客户帐户,并 link 将其提供给特定客户。此过程将使用 devise_invitable 为 app2 创建一个帐户,并向所选客户发送电子邮件 link 以设置他们的门户应用程序(仅接受邀请)但由于某种原因,邀请 link 不起作用,只是重定向到主页。所以基本上app2是不能注册账号的,必须通过app1创建账号,然后通过邮件发给客户。
我从某人那里听说只有 URL 不正确时才应该重定向。但它是通过邀请函数
生成的URL
PortalUser.invite!({:name => params[:name], :email => params[:email]}, current_user)
自动发送电子邮件给这个 link http://localhost:3000/portal_users/invitation/accept.20?invitation_token=p7UKK8Z8nKn4busWerpx
我还可以选择重新发送邀请电子邮件,以防客户请求但发送相同的电子邮件 link
PortalUser.find(params[:id]).deliver_invitation
我能想到的一件事是,如果 2 个不同应用程序的加密解密密钥不同,那么当 app2 尝试解密令牌时,它看起来就像是错误的令牌。如果是这种情况,您知道我将如何更改这些键以匹配吗?或者更确切地说,为 app1 提供 app2 的加密密钥,并告诉设计为所有邀请或 app2 的帐户使用该加密密钥。
编辑:
所以我发现我可以在 config/initializers/devise.rb 中分配一个 secret_key,如果两个应用程序使用相同的密钥,它就会工作。但是,我还有一个问题,这样做会带来安全问题吗?
“这样做会带来安全问题吗?” - 在某种程度上,存在安全问题。例如,登录一个应用程序的任何人都可以访问另一个应用程序。听起来一个应用程序是后端或管理应用程序,另一个是面向消费者的应用程序。登录一个 不应 授予另一个访问权限。
可能还有另一种更好的方法。您可以创建一个在加载页面时处理的一次性使用令牌。它可以登录用户并允许他们完成注册过程。
编辑:
您可以创建一个可用于登录的令牌。
token = SignInToken.find_by(token: token)
user = token&.user
sign_in(user, scope: :user) if user
参考:Devise Wiki
所以我有 2 个应该可以协同工作的应用程序。我有 app1,这是一个只有我们的员工会使用的应用程序,而 app2 是一个 customer_portal 应用程序,客户可以在其中登录并支付余额。我正在努力做到这一点,以便在 app1 中我们可以创建一个客户帐户,并 link 将其提供给特定客户。此过程将使用 devise_invitable 为 app2 创建一个帐户,并向所选客户发送电子邮件 link 以设置他们的门户应用程序(仅接受邀请)但由于某种原因,邀请 link 不起作用,只是重定向到主页。所以基本上app2是不能注册账号的,必须通过app1创建账号,然后通过邮件发给客户。
我从某人那里听说只有 URL 不正确时才应该重定向。但它是通过邀请函数
生成的URLPortalUser.invite!({:name => params[:name], :email => params[:email]}, current_user)
自动发送电子邮件给这个 link http://localhost:3000/portal_users/invitation/accept.20?invitation_token=p7UKK8Z8nKn4busWerpx
我还可以选择重新发送邀请电子邮件,以防客户请求但发送相同的电子邮件 link
PortalUser.find(params[:id]).deliver_invitation
我能想到的一件事是,如果 2 个不同应用程序的加密解密密钥不同,那么当 app2 尝试解密令牌时,它看起来就像是错误的令牌。如果是这种情况,您知道我将如何更改这些键以匹配吗?或者更确切地说,为 app1 提供 app2 的加密密钥,并告诉设计为所有邀请或 app2 的帐户使用该加密密钥。
编辑: 所以我发现我可以在 config/initializers/devise.rb 中分配一个 secret_key,如果两个应用程序使用相同的密钥,它就会工作。但是,我还有一个问题,这样做会带来安全问题吗?
“这样做会带来安全问题吗?” - 在某种程度上,存在安全问题。例如,登录一个应用程序的任何人都可以访问另一个应用程序。听起来一个应用程序是后端或管理应用程序,另一个是面向消费者的应用程序。登录一个 不应 授予另一个访问权限。
可能还有另一种更好的方法。您可以创建一个在加载页面时处理的一次性使用令牌。它可以登录用户并允许他们完成注册过程。
编辑:
您可以创建一个可用于登录的令牌。
token = SignInToken.find_by(token: token)
user = token&.user
sign_in(user, scope: :user) if user
参考:Devise Wiki