在rails 3.2 + devise 2.0之后,设计列confirmed_at不再更新

Rub*_*tic 4 ruby-on-rails devise ruby-on-rails-3 ruby-on-rails-3.1

升级到rails 3.2并设计2.0并单击通过电子邮件发送的确认链接或从开发中的控制台复制后,confirmed_at列不会更新.结果就是你无法登录.

解决这个问题的方法是什么,因为日志中没有任何内容,可访问的属性包含了confirmed_at,因此该列应该是可更新的.

小智 8

几个轴用于您的故障排除.

首先(显而易见的:-))您已在用户模型中激活确认

devise : :confirmable
Run Code Online (Sandbox Code Playgroud)

然后,检查数据库和模型中是否定义了以下列(如果您使用的是Mongoid,则使用不同的类型)

## Confirmable
t.string   :confirmation_token
t.datetime :confirmed_at
t.datetime :confirmation_sent_at
# t.string   :unconfirmed_email # Only if using reconfirmable
Run Code Online (Sandbox Code Playgroud)

最后(我不知道它适用于你并提出问题)但是2.0中有关于确认的变化

此外,还重命名或删除了一些配置选项:

Devise.confirm_within已重命名为Devise.allow_unconfirmed_access_for;

然后,为刚刚创建的新用户提供rails控制台的是什么?

应该给出类似的东西

User.last
 => #<User .... email: "youremail@example.com", confirmation_token: "abch76UfqHBBxHw97123", confirmed_at: nil, confirmation_sent_at: 2012-02-10 11:06:41 UTC, unconfirmed_email: nil, ....>
Run Code Online (Sandbox Code Playgroud)

您收到的链接(您也可以在浏览器中手动复制粘贴应该类似于(并与上述确认令牌一致)

<p><a href="http://localhost:5000/users/confirmation?confirmation_token=abch76UfqHBBxHw97123">Confirm my account</a></p>
Run Code Online (Sandbox Code Playgroud)

应相应地修改控制台中的用户

User.last
 => #<User .... email: "youremail@example.com", confirmation_token:nil, confirmed_at: confirmed_at: 2012-02-10 11:28:04 UTC, confirmation_sent_at: 2012-02-10 11:06:41 UTC, unconfirmed_email: nil, ....>
Run Code Online (Sandbox Code Playgroud)

如果在浏览器中复制链接时仍然无效,是否可以复制日志的最后几行?

周围的人

20:36:51 web.1     | Started GET "/users/confirmation?confirmation_token=abch76UfqHBBxHw97123" for 127.0.0.1 at 2012-02-10 20:36:51 +0900
20:36:51 web.1     | [127.0.0.1] Processing by Devise::ConfirmationsController#show as HTML
20:36:51 web.1     |  [127.0.0.1]   Parameters: {"confirmation_token"=>"abch76UfqHBBxHw97123"}
Run Code Online (Sandbox Code Playgroud)