我们刚刚将rails 3应用程序切换到SSL,后来注意到密码恢复令牌不再适用于生产。当用户尝试使用电子邮件链接重置密码时,它会显示“无效令牌”。
我正在使用rails 3.0.0,设计1.3.4,我们的用户模型有:
devise :database_authenticatable, :invitable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
我没有使用像ssl_requirement这样的东西,因为我们在应用程序中普遍使用了ssl。我过期的旧令牌,以确保它不会以某种方式到期旧令牌或其他东西。我很困惑。
答案 0 :(得分:3)
这是我们的nginx配置问题,与Devise完全无关。但是,如果其他任何人发现自己处于类似的位置,这就是失败的原因。我们设置nginx将普通的http网址重定向到https ..特别是当有人从domain.com到www.domain.com到https://www.domain.com时,我们进行了双重重写,并且reset_code被添加到结尾a第二次,以便reset_code以应用程序的形式发送到应用程序?reset_code = 12345?reset_code = 12345。
所以我们改变了我们的nginx配置:
# rewrite ^ https://$server_name$request_uri permanent;
rewrite ^(.*) https://$host$1 permanent;
然后只是一个优化
rewrite ^(.*)$ https://www.domain.com$1 permanent;
现在好多了。
答案 1 :(得分:0)
上面提供的答案是正确的。但这是一个临时解决方案,它只适用于设计。但是,当您通过电子邮件手动发送确认令牌时,会出现问题。 您可以永久修复此问题。转到环境/生产。 并改变这一行
config.action_mailer.default_url_options = {:host => ' domainname',:protocol => " http"}
到
config.action_mailer.default_url_options = {:host => ' domainname',:protocol => " HTTPS"}