密码验证中断设计确认



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

validates :password, { confirmation: true, length: { in: 6..20 } } 
validates :username, { uniqueness: true, length: { in: 3..25 } }

乍一看,这似乎工作良好。未能输入有效信息将导致用户信息无法保存到数据库中。不幸的是,它破坏了电子邮件确认设计。设计仍然发送电子邮件注册,但确认链接不像以前一样工作。突然发生的事情是,他把我送到我可以重新请求确认信息的页面(尽管根本没有被告知这样做)。他还抱怨(通过flash消息),我的密码不能是"空白",用户还没有保存。这毫无意义,因为在点击确认链接之前,用户已经被保存了(也有一个有效的pw)。事实上,当我手工检查数据库表时,它确实被保存了。

我从中收集到的是,他可能试图改变用户表中的某些列,如confirmed_email和confirmed_at等。但不知何故,他同时也试图提供一个新的pw,这绝对不是他应该做的。他为什么把我重定向到那个我可以重新发送确认邮件的页面,我也完全不明白。

我能做什么来解决我的问题?我不想使用:validatable,而是想在不完全破坏我的设计的情况下自己进行验证。以下是一些附加信息:

rails 3.2.12


ruby 1.9.3p392设计2.2.3

日志:

Started GET "/users/confirmation?confirmation_token=ojx35QawQdHSWi655mru" for 127.0.0.1 at 2013-06-20 17:01:12 +0200由设计::confirmationscontroller#处理显示为HTML参数:{"confirmation_token"=>"ojx35QawQdHSWi655mru"}用户负载(0.3ms)选择"users"。* FROM"users"WHERE"users"。"confirmation_token" = " ojx35QawQdHSWi655mru(0.1 ms)开始User Exists (0.2ms) SELECT 1 AS one FROM "users" WHERE ("users")。"username" = 'what the heck' AND "users"。"id" != 22(0.1 ms)回滚设计/共享/_links呈现。女士erb (0.4)设计/确认/new.html呈现。布局/应用程序中的动词(2.1ms)在14ms内完成200个OK (Views: 9.0ms | ActiveRecord: 0.8ms)

这可能不是您的问题,但是设计已经在

中为您验证了密码。

config/initializers/devise.rb

config.password_length = 8..128

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

在您的设计中编辑这一行。rb

 config.password_length = 6..20

上面这一行是设计的内置配置。初始密码长度设置为8 ~ 128。设计用户不需要编写关于用户身份验证的自定义验证器。例如,对于电子邮件格式,我们可以设置

config.email_regexp = /A[^@]+@[^@]+z/

忘记在application_controller中输入。

before_action :configure_permitted_parameters, if: :devise_controller? protected
def configure_permitted_parameters
  devise_parameter_sanitizer.for(:sign_up {|u|u.permit(:email,:password,:password_confirmation)}
end

最新更新