密码验证会破坏设计确认

时间:2013-06-20 12:33:59

标签: ruby-on-rails ruby devise confirmation

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

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

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

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

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

rails 3.2.12
红宝石1.9.3p392 设计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   用户存在(0.2ms)SELECT 1 AS一个FROM“users”WHERE(“users”。“username”='what the heck'和“users”。“id”!= 22)LIMIT 1    (0.1ms)ROLLBACK   渲染设计/共享/ _links.erb(0.4ms)   在布局/应用程序中呈现设计/确认/ new.html.erb(2.1ms) 在14ms完成200 OK(浏览次数:9.0ms | ActiveRecord:0.8ms)

3 个答案:

答案 0 :(得分:7)

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

中验证了您的密码

config/initializers/devise.rb

config.password_length = 8..128

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

答案 1 :(得分:0)

在devise.rb中编辑此行

 config.password_length = 6..20

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

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

答案 2 :(得分:0)

忘了在rails 4中的application_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