在Rails 4.x中,secret_key_base
用于签署会话cookie以及通过调用cookies.signed
创建的任何其他签名cookie。
我想更新/循环/滚动此secret_key_base
,但不会失去对所有以前签名的Cookie的访问权限(我不介意丢失会话)。有可能这样做吗?
理想情况下,我喜欢以下内容:
secret_key_base
。secret_key_base
和新secret_key_base
,以便使用旧密钥签名的Cookie可以使用较新的密钥重新签名。secret_token
。我知道从使用secret_key_base
升级到^\d+,(\d+\/\w+\/\d+)
的功能类似。有没有办法使用Rails实现这一目标?
答案 0 :(得分:2)
您可以通过覆盖Cookie中间件中的encrypted
和signed
等一些方法来首先尝试使用旧secret_key_base
读取Cookie来实现此目的。如果成功,那么您可以将它们升级到新的。最终所有旧的cookie都将升级到新的,然后您可以删除自定义的补丁。看看
还要检查消息验证程序在这里的工作方式。
希望有所帮助。
答案 1 :(得分:0)
你可以用不同的方式解决它。 现在保留旧的secret_key并创建一个临时表,您可以存储映射到特定用户的所有cookie数据。也可以使用redis。如果您确定已收到所有现有cookie数据,则可以更改secret_key。这应该使所有cookie数据无效。现在,只要收到cookie,您就可以首先检查用户是否存在该数据,并相应地设置cookie并从临时表/ key_store中删除该条目。临时表为空后,您可以完全删除该机制