我正在使用设计来管理我的应用程序的用户帐户。到目前为止,一切工作都很顺利,但我偶然发现了我发现的非常奇怪的行为。基本上发生的事情是,我下面的代码添加到我的用户模型:密码验证中断设计确认
validates :password, { confirmation: true, length: { in: 6..20 } }
validates :username, { uniqueness: true, length: { in: 3..25 } }
乍一看这似乎很好地工作。未能输入有效信息会使用户信息不能保存到数据库中。不幸的是,它以某种方式破坏了设计的电子邮件确认。设计仍然在注册时发送电子邮件,但确认链接不像以前那样工作。突然间发生了什么事情,他发送我到页面,我可以重新请求确认信息(尽管没有被告知这样做)。他还抱怨(通过闪光消息)我的密码不能“空白”,并且用户未被保存。这是毫无意义的,因为在确认链接被点击之前用户已经被保存了(也有一个有效的密码)。而且它实际上得到保存,因为我发现手动检查数据库表。
我从这里收集到的是他可能试图更改用户表中的某些列,如confirmed_email和confirmed_at等。但不知何故,他也尝试在同一时间提供新的pw,这绝对不是他应该正在做。为什么他将我重定向到可以重新发送确认邮件的页面,这完全超出了我的想象。
我能做些什么来解决我的问题?我不想使用:validatable,而是做我自己的验证,而不会完全破坏我的设计。下面是一些额外的信息:
轨3.2.12
红宝石1.9.3p392 色器件2.2.3
日志:
入门使用 “/用户/确认confirmation_token = ojx35QawQdHSWi655mru?” 为127.0。 0.1在2013-06-20 17:01:12 +0200 处理由Devise :: ConfirmationsController#显示为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(“users”。“username”='what heck'AND“users”。“id”!= 22)LIMIT 1 (2.1ms) (0.1ms)ROLLBACK 渲染设计/共享/ _links.erb(0.4ms) 布局/应用程序中渲染设计/确认/ new.html.erb(2.1ms) 已完成200在14ms内完成(Views:9.0ms | ActiveRecord的:为0.8ms)
对我来说这条线是用相同的号码活跃,但我仍然可以使用2个报名符号长度密码。有人知道为什么 – Gediminas
取消注释后,您是否重新启动服务器? – lilwupster
是的。对我来说,它只在将验证规则添加到模型中时才有效... – Gediminas