Web サイトに「パスワードの変更」機能を実装しようとしています。
私の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
アカウントを作成するとき、ユーザーは名前、電子メール、パスワード、および password_confirmation を入力する必要がありますが、Rails コンソールに移動してテーブルを検索すると、 password と password_confirmation の代わりにencrypted_passwordが含まれています。
ユーザーからの入力を取得すると(フォームから渡されます)、次のことを行いました。
@user.update_attributes(:password => params[:password][:password], :password_confirmation => params[:password][:password_confirmation])
@user.save
しかし、これは機能していません!古いパスワードを復号化し、新しいパスワードを暗号化して更新する必要があるのだろうか...何か洞察はありますか? 御時間ありがとうございます!