Rails не будет автоматически ничего делать с вашим столбцом только потому, что он называется password_digest
. На самом деле вам нужно реализовать шифрование пароля, чтобы что-то произошло.
В Rails введено has_secure_password
в 3.1, чтобы создать стандартизированный способ обработки шифрования пароля и избежать ловушек при повторном изобретении колеса шифрования пароля. .
# make sure you add bcrypt to the gemfile and run bundle install
class User < ApplicationRecord
has_secure_password
end
Добавляет установщик password=
в модель, который хэширует пароль с помощью bcrypt и устанавливает password_digest
. Он также добавляет установщик и проверки password_confirmation=
.
Затем вы можете аутентифицировать пользователей, вызвав:
class SessionsController
def create
# will be nil or false if the email or password does not check out
@user = User.find_by(params[:email])&.authenticate(params[:password])
if @user
session[:user_id] = @user.id
redirect_to '/somewhere'
else
render :new, notice: 'Invalid email or password'
end
end
end
Это сравнивает результат хеширования params[:password]
со значениями, хранящимися в базе данных. , Конечно, вам не следует изобретать колесо аутентификации, если вы не хотите больше узнавать о колесах. Для производственных приложений вы должны действительно выбрать проверенные решения, такие как Devise.