Ruby on rails 密码验证中断设计确认

Ruby on rails 密码验证中断设计确认,ruby-on-rails,ruby,devise,confirmation,Ruby On Rails,Ruby,Devise,Confirmation,我正在使用Desive管理我的应用程序的用户帐户。到目前为止,一切都很好,但我偶然发现了我发现的非常奇怪的行为。基本上,我在用户模型中添加了以下代码: validates :password, { confirmation: true, length: { in: 6..20 } } validates :username, { uniqueness: true, length: { in: 3..25 } } 乍一看,这似乎很管用。如果输入的信息无效,将无法将用户信息保存到数据库中。不幸的

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

validates :password, { confirmation: true, length: { in: 6..20 } } 
validates :username, { uniqueness: true, length: { in: 3..25 } }
乍一看,这似乎很管用。如果输入的信息无效,将无法将用户信息保存到数据库中。不幸的是,它以某种方式破坏了Desive的电子邮件确认。Desive仍然会在注册时发送电子邮件,但确认链接不再像以前那样工作。突然发生的事情是,他将我发送到页面,在那里我可以重新请求确认信息,尽管根本没有被告知这样做。他还通过flash消息抱怨我的密码不能为空,用户还没有被保存。这没有任何意义,因为用户在确认链接被有效的pw点击之前就已经被保存了。事实上,当我发现手动检查数据库表时,它确实被保存了

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

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

轨道3.2.12 ruby 1.9.3p392 设计2.2.3

日志:

已于2013-06-20 17:01:12+0200开始获取/用户/确认?确认令牌=ojx35QawQdHSWi655mru用于127.0.0.1 Deviate::ConfirmationControllerShow作为HTML处理 参数:{confirmation_token=>ojx35QawQdHSWi655mru} 用户加载0.3ms从用户中选择用户。*其中users.confirmation_令牌='ojx35QawQdHSWi655mru'限制1 0.1ms开始 User Exists 0.2ms从users.username='what heck'和users.id!=22限制1 0.1ms回滚 渲染设计/共享/_links.erb 0.4ms 布局/应用程序2.1ms内呈现的设计/确认/new.html.erb
在14ms视图中完成200 OK:9.0ms | ActiveRecord:0.8ms

这可能不是您的问题,但Desive已在中为您验证密码

config/initializers/designe.rb

 config.password_length = 6..20

config.password_length=8..128


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

在designe.rb中编辑此行

 config.password_length = 6..20
上面这一行是designe的内置配置。原始密码长度设置为8到128。designe用户无需编写有关用户身份验证的自定义验证器。例如,对于电子邮件格式,我们可以设置

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

忘记输入rails 4中的应用程序_controller.rb

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

一句话的答案很少被接受。试着编辑并解释为什么这个答案是正确的,以帮助OP学习。对我来说,这行是活动的,数字相同,但我仍然可以使用2个符号长度的密码注册。有人知道为什么吗?您在取消注释后重新启动了服务器吗?您的模型和Desive之间可能存在断开连接的情况。一个很好的测试是尝试一个新的小项目,只使用一个设备,看看它是否在无菌环境下工作。