我使用ruby-on-rails-5 devise和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
在创建具有新时区的帐户后,在我的数据库中,正确插入了用户记录的每个时间戳值(使用新时区)。
我该如何解决这个问题?
答案 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转换它们