密码验证会破坏设计确认

use*_*884 2 ruby ruby-on-rails confirmation devise

我正在使用设计来管理我的应用程序的用户帐户.到目前为止,一切都工作得很好,但我偶然发现了我发现的非常奇怪的行为.基本上发生了什么,我将以下代码添加到我的用户模型:

validates :password, { confirmation: true, length: { in: 6..20 } } 
validates :username, { uniqueness: true, length: { in: 3..25 } }
Run Code Online (Sandbox Code Playgroud)

乍一看,这似乎工作得很好.未能输入有效信息将使用户信息不会保存到数据库中.不幸的是,它以某种方式破坏了设计的电子邮件确认.Devise仍会在注册时发送电子邮件,但确认链接不像以前那样工作.突然发生的事情是他将我发送到我可以重新请求确认信息的页面(尽管根本没有被告知这样做).他还抱怨(通过flash消息)我的密码不能为"空白"并且用户尚未保存.这是没有意义的,因为在甚至点击确认链接之前已经保存了用户(具有有效的pw).实际上它确实得到了保存,因为我发现手动检查数据库表.

我从中收集到的是他可能正在尝试更改用户表中的某些列,如confirmed_email和confirmed_at等.但不知何故,他也试图同时提供一个新的pw,这绝对不是他应该做的.为什么他将我重定向到我可以重新发送确认邮件的页面也完全超出了我的范围.

我该怎么做才能解决我的问题?我不想使用:validatable,而是在不完全破坏我的设计的情况下进行自己的验证.这是一些额外的信息:

rails 3.2.12
ruby 1.9.3p392 devise 2.2.3

日志:

开始获取"/ users/confirmation?confirmation_token = ojx35QawQdHSWi655mru"for 127.0.0.1 at 2013-06-20 17:01:12 +0200由Devise处理:: ConfirmationsController #show as HTML参数:{"confirmation_token"=>"ojx35QawQdHSWi655mru"用户负载(0.3ms)SELECT"users".*FROM"users"WHERE"users"."confirmation_token"='ojx35QawQdHSWi655mru'LIMIT 1(0.1ms)BEGIN User Exists(0.2ms)SELECT 1 AS one FROM"users" WHERE("用户"."用户名"="哎呀"和"用户"."id"!= 22)LIMIT 1(0.1ms)ROLLBACK渲染设计/共享/ _links.erb(0.4ms)渲染设计/确认布局/应用程序内的/new.html.erb(2.1ms)在14ms内完成200 OK(浏览次数:9.0ms | ActiveRecord:0.8ms)

lil*_*ter 7

它可能不是你的问题,但设计已经验证了你的密码

config/initializers/devise.rb

config.password_length = 8..128

尝试更改它,而不是先将其添加到用户模型.(或删除它)

  • 取消注释后重新启动服务器了吗? (2认同)