5

我的团队即将结束对我们系统的大规模改革,并准备进行重大转变。

目前,我们使用弹性 IP 在 AWS 上托管。我们的堆栈是 Ruby on Rails,我们正在使用 capistrano。我们还有一个黑莓应用程序和一个 iPhone 应用程序,并在客户手中。应用程序和服务器之间的身份验证是通过 cookie 而不是任何类型的身份验证密钥。

我很清楚这不是进行身份验证的最佳方式,但遗留代码是遗留的。

由于我们公司和服务的性质,当我们切换时,用户不会被注销并且通过 cookie 从移动应用程序传递到服务器的会话是必须的。

我尝试了以下方法:

将 DNS 指向不同的 IP。将弹性 IP 指向不同的 AWS 实例。

在每种情况下,cookie 似乎都没有受到尊重。

我是一名开发人员而不是系统管理员,并且已经没有想法了。无论如何,是否可以使用 Devise on Rails 或通过 AWS 制作新的实例来尊重 cookie?还是我应该考虑的其他选择?

4

1 回答 1

3

HTTP Cookie 不包含任何有关服务 IP 地址的信息。它们与域名(或子域的根)和路径相关联。因此,只要域保持不变,您就可以随意更改服务 IP 地址。在您的情况下,两种解决方案都有效 - 您可以迁移 IP 地址或仅更改 DNS 记录的 IP 值。这应该足以让用户保持登录状态。

重要的提醒问题是 - 您将会话数据保存在哪里?你在 Rails 中使用什么会话存储?您可能没有将会话数据迁移到您的测试环境,因此客户端已注销。

Rails 的默认会话存储是 cookie 存储(会话数据保存在客户端),因此只要您在应用程序中的 secret_token 保持不变,它就应该在您的情况下“正常工作”。也许这是在部署期间重新生成的?可能值得一试 (config/initializers/secret_token.rb) 此令牌用于对 cookie 进行签名,以确保客户端没有更改它们。

确保所有这些点在您的情况下都是有效的,并仔细检查您的测试过程,因为它应该可以在没有任何额外操作的情况下正常工作。

于 2013-04-25T16:58:48.623 回答