Ваш контроллер немного сложен, я предполагаю, что это как-то вызывает вашу проблему. Вы должны вывести ошибки в представлении, чтобы увидеть, что происходит не так, к сожалению, это не было частью вашего вопроса. Тем не менее, в общем случае есть два варианта , чтобы описать эту работу в bcrypt ruby Github репозитории . Обратите внимание, я не пробовал с current_user
, params[:user]
и @user.authenticate
удалить сложность и сконцентрироваться на bcrypt topi c.
Опция 1
Использование has_secure_password
в вашей пользовательской модели, например:
class User < ApplicationRecord
has_secure_password
end
Вам нужен столбец дайджеста пароля и вам нужно работать с :password
в ваш метод user_params.
def user_params
params.require(:user).permit(:username, :title, :firstName, :surname, :password, :password_confirmation)
end
Введенный пароль будет сохранен в базе данных в столбце password_digest
.
Опция 2
Это описано для пользовательская модель страницы bcrypt Github .
В этом случае вы НЕ используете has_secure_password
, но добавляете следующий код в вашу модель пользователя:
class User < ApplicationRecord
include BCrypt
def password
@password ||= Password.new(password_hash)
end
def password=(new_password)
@password = Password.create(new_password)
self.password_hash = @password
end
end
Тогда ваш user_params
метод должен отражать имя атрибута :password_hash
:
def user_params
params.require(:user).permit(:username, :title, :firstName, :surname, :password_hash, :password_confirmation)
end
В этом случае вашей базе данных потребуется столбец password_hash
вместо password_digest
, чтобы он работал, используя Пример кода выше. Конечно, вы также можете повторно использовать password_digest
вместо password_hash
, а затем заменить password_hash
в приведенном выше коде на password_digest
.
Примечания
В обоих случаях я использую вид, который вы сделали с полем password
:
<div class="form-group row col-md-12">
<div class="col-md-6">
<%= f.label :password, "New Password"%><br>
<%= f.password_field :password, class:"form-control" %>
</div>
</div>
Контроллер в моих тестах выглядел так:
def update
if @user.update(user_params)
redirect_to @user, notice: 'User was successfully updated.'
else
render :edit
end
end
Тестовое приложение
У меня также есть добавили это небольшое тестовое приложение с помощью опции 1 с has_secure_password
в репозиторий Github @ https://github.com/cadamini/rails-bcrypt-ruby-test