Я получил решение для этого.
Предполагается, что колдовство находится по умолчанию.
По мнению: (я использую тонкий для шаблона)
= form_for @user do |f|
= f.label :old_password
= f.password_field :old_password
= label_tag :old_password
= password_field_tag :old_password
= f.label :password"
= f.password_field :password
= f.label :password_confirmation
= f.password_field :password_confirmation
= f.submit "Submit", class: "button"
Затем в контроллере, вы можете сделать это:
def update
@user = User.find(id) # find the user first.
# this is the magic, use the saved crypted_password and salt to authenticate user's password
authenticate = BCrypt::Password.new(@user.crypted_password) == params[:old_password] + @user.salt
if authenticate && @user.update_attributes(params[:user])
... # updated and redirect or whatever.
else
... # fail
end
end
Если вы используете другой способ склеп пароль, вам нужно измените магическую линию для правильного метода.
Возможно, полезно.
Я извиняюсь, потому что это не отвечает на ваш вопрос, но почему вы пытаетесь зашифровать пароли вручную, если используете систему аутентификации? Вам не нужно вообще управлять шифрованием паролей, используя колдовство. –
Я создаю обновление вашей парольной функции, в которой вам нужно ввести свой предыдущий пароль (то есть исходный пароль) в дополнение к вашему новому, и поэтому мне нужно хэш-код «оригинала», чтобы сравнить его с текущим паролем пользователя чтобы убедиться, что они совпадают, прежде чем разрешить им сбросить свой пароль – Lee
вместо 'User.load_from_reset_password_token (токен)'? –