我正在尝试在我的网站上实现“更改密码”功能。
我的 user.rb 中有以下内容
before_save :encrypt_password
def encrypt_password
self.encrypted_password = encrypt(password)
end
def encrypt
string
end
def has_password?(submitted_password)
encrypted_password == encrypt(submitted_password)
end
def encrypt_password
self.salt = make_salt unless has_password?(password)
self.encrypted_password = encrypt(password)
end
def encrypt(string)
secure_hash("#{salt}--#{string}")
end
def make_salt
secure_hash("#{Time.now.utc}--#{password}")
end
def secure_hash(string)
Digest::SHA2.hexdigest(string)
end
def self.authenticate(email, submitted_password)
user = find_by_email(email)
return nil if user.nil?
return user if user.has_password?(submitted_password)
end
创建帐户时,用户必须输入姓名、电子邮件、密码和密码确认,但如果我进入 rails 控制台并查找表,它有一个encrypted_password,而不是密码和密码确认。
当我从用户那里得到输入(通过表单传递)时,我做了:
@user.update_attributes(:password => params[:password][:password], :password_confirmation => params[:password][:password_confirmation])
@user.save
但这不起作用!我想知道我是否需要解密旧密码并加密新密码才能更新它......有什么见解吗?谢谢你的时间!