设置时区会破坏设计验证

时间:2016-07-27 18:07:50

标签: ruby-on-rails devise devise-confirmable

我使用 和devise-token-auth。

我在我的用户模型中做到了这一点并且工作正常:

before_create :skip_confirmation!

# Include default devise modules.
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable

我能够创建自动确认的帐户。 对于其他东西,我需要通过将以下内容添加到我的application.rb。

来更改应用程序的时区
config.time_zone = 'Europe/Berlin'
config.active_record.default_timezone = 'Europe/Berlin'

时区内容也可行,但由于未知原因,创建用户已停止。如果我创建一个并尝试登录,则会发生以下错误:

A confirmation email was sent to your account at '...'. You must follow the instructions in the email before your account can be activated

在创建具有新时区的帐户后,在我的数据库中,正确插入了用户记录的每个时间戳值(使用新时区)。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

我认为由于某种原因,时区Devise用于设置confirmed_at表上的users字段位于'Europe / Berlin'时区之前。因此,当Devise检查confirmed_at是否设置为当前日期/时间之前的日期/时间时,它将返回false。

解决方案:尝试重新启动服务器以查看是否更新了它。

<强>更新

我看了Devise::Models后看到以下代码:

  def skip_confirmation!
    self.confirmed_at = Time.now.utc
  end

  def confirmed?
    !!confirmed_at
  end

这基本上让我相信最好用UTC设置应用时间,然后使用像Local Time这样的Gem转换它们