我有一个Rails应用程序,用户注册一个帐户,并为他们创建一个子域。然后,他们可以进入子域并使用其凭据登录。工作流程看起来像这样:
(注意:要实现单独的“数据库”,我使用的是postgres模式,但这应该是无关紧要的。)
我的问题涉及第3步。我想将用户重定向到他们的子域并自动登录,而不是要求他们登录。但是,我不想要共享一个会话遍布所有子域。
我想以某种方式安全地传输自动登录请求。
我考虑过使用一次性随机令牌,我会将其存储在Cookie和users
表中。用户成功创建帐户后,他将被重定向到子域。此时令牌将被消耗/销毁,用户将自动登录。
我还需要在到期前使用令牌的短窗口。
思考?谢谢!
答案 0 :(得分:3)
我遇到了同样的问题,你建议的可能解决方案不起作用,因为子域之间没有共享会话。
我通过以下方式解决了它(你提出了相同的想法,不同的实现):
使用提供的密钥自动登录用户:
key = LoginKey.find_by_login_key(params [:key])
sign_in(key.user)除非是key.nil?
销毁钥匙:
key.destroy
我不喜欢这个解决方案100%,我尝试了很多不同的方法,不需要创建db记录,但总是面临安全问题,我认为这个是安全的。