我知道这个问题曾经被问过,但是我不知道该如何解决。
如果我遵循教程https://api.rubyonrails.org/classes/ActiveModel/SecurePassword/ClassMethods.html 它说我需要在我的架构中输入password_digest列,在模型中需要has_secure_password
然后,在我的控制器中,我使用强大的参数来创建模型的实例(尽管我的模型未称为用户)。
它看起来像这样:
@work = Work.find(params[:work_id])
@work_provider = WorkProvider.create(work_provider_params)
@work_provider.work = @work
@provider = Provider.find(params[:provider_id])
@work_provider.provider = @provider
@work_provider.name = @provider.name
@work_provider.category = @provider.category
@work_provider.save
def work_provider_params
params.require(:work_provider).permit(:name, :category, :email, :password_digest)
end
我的电子邮件和密码摘要位于强参数work_provider_params中。
一切正常,没有错误...但是在数据库中只是空白。我正在为用户使用设备,并且当我尝试在视图中放置用户密码时,由于已加密,因此不会显示该密码。 但是在这里,如果我尝试打印它,则会在视图中显示我的work_provider密码,这使我认为它尚未加密!
感谢您的帮助!
答案 0 :(得分:1)
您要接受来自用户的明文密码,而不是摘要(即从明文创建的哈希)。
def work_provider_params
params.require(:work_provider)
.permit(:name, :category, :email, :password)
end
从参数中提取摘要会否定密码加密的全部目的-这个想法是您永远不会在数据库中存储纯文本。
但是,如果您使用的是Devise,则使用ActiveModel::SecurePassword
是没有意义的。 Devise通过database_authenicable模块自行处理。我建议您follow the instructions for Devise代替。