【问题标题】:Ruby on Rails 4: has_secure_password is not asking for a password confirmation when creating new userRuby on Rails 4:has_secure_password 在创建新用户时不要求密码确认
【发布时间】:2014-07-14 20:06:14
【问题描述】:

我目前正在使用 RoR4 编写应用程序,但在身份验证方面遇到了问题。即使我已将 has_secure_password 添加到 User 模型中,我似乎仍然能够创建新用户而无需提供密码确认。

2.1.2 :012 > me = User.create(:institution_id => 1, :email => "me@myschool.edu", :password => "mypassword")
(0.1ms)  BEGIN
User Exists (0.3ms)  SELECT  1 AS one FROM `users`  WHERE `users`.`email` = BINARY  'me@myschool.edu' LIMIT 1
SQL (0.2ms)  INSERT INTO `users` (`created_at`, `email`, `institution_id`, `password_digest`, `updated_at`) VALUES ('2014-07-14 20:02:34', 'me@myschool.edu', 1, '$2a$10$sD2N.2nxhYO7egzzWxfF5.cdIZ4ds41.sU93Ja3E9Q0qAOaABdZb6', '2014-07-14 20:02:34')
(8.2ms)  COMMIT
=> #<User id: 5, institution_id: 1, first_name: nil, last_name: nil, email: "me@myschool.edu", blurb: nil, facebook_link: nil, facebook_token: nil, password_digest: "$2a$10$sD2N.2nxhYO7egzzWxfF5.cdIZ4ds41.sU93Ja3E9Q0...", api_key: nil, active: false, created_at: "2014-07-14 20:02:34", updated_at: "2014-07-14 20:02:34", authentication_token: nil> 

为什么会这样? has_secure_password 不应该也总是需要密码确认吗??

感谢您的帮助

【问题讨论】:

  • 你包括gem 'bcrypt' 吗?你的用户模型包含什么?
  • 我确实安装了'bcrypt'。实际上,我决定使用自定义验证,因为我需要以特殊方式处理身份验证的某些方面。我现在使用 bcrypt 来生成 password_salt 和 password_hash 以增加一层安全性。不过感谢您的帮助!

标签: authentication ruby-on-rails-4 passwords activemodel


【解决方案1】:

确保你遵循了这些事情:

gem 'bcrypt' 添加到 gem 文件中。

下一步:

有一个password_digest 属性

下一步:

class User < ActiveRecord::Base
  has_secure_password
end

那你就可以测试了:

user = User.new(name: 'david', password: '', password_confirmation: 'nomatch')
user.save                                                       # => false, password required
user.password = 'mUc3m00RsqyRe'
user.save                                                       # => false, confirmation doesn't match
user.password_confirmation = 'mUc3m00RsqyRe'
user.save                                                       # => true
user.authenticate('notright')                                   # => false
user.authenticate('mUc3m00RsqyRe')                              # => user
User.find_by(name: 'david').try(:authenticate, 'notright')      # => false
User.find_by(name: 'david').try(:authenticate, 'mUc3m00RsqyRe') # => user

【讨论】:

    猜你喜欢
    • 2013-11-05
    • 1970-01-01
    • 1970-01-01
    • 2011-04-08
    • 1970-01-01
    • 2015-03-15
    • 1970-01-01
    • 2012-04-03
    • 2013-11-02
    相关资源
    最近更新 更多