提问人:Jay 提问时间:7/15/2023 最后编辑:Jay 更新时间:7/16/2023 访问量:28
无法使用 bcrypt-ruby 和 has_secure_password 保存密码
Unable to save password utilizing bcrypt-ruby and has_secure_password
问:
我们正在从 Devise 转向更简化的身份验证流程。如果我能解决以下问题,我想我可以让其余的身份验证过程正常工作。
如果我们的一位客户丢失了密码,他们可以提交他们的用户 ID,我们将向他们发送一封包含新密码的电子邮件。电子邮件中发送的密码未保存在我们的系统中。
宝石文件:
gem 'bcrypt-ruby', '3.1.2'
数据库架构:
create_table "users", force: :cascade do |t|
...
t.string "username", limit: 255, null: false
t.string "password_digest", limit: 255
...
end
用户模型:
has_secure_password
...
attr_accessible ... :username, :password_digest, :password, :password_confirmation,...
...
def set_password(len = 12)
chars = ("a".."z").to_a + ("A".."Z").to_a + ("0".."9").to_a
newpass = ""
1.upto(len) { |i| newpass << chars[rand(chars.size-1)] }
self.password = self.password_confirmation = newpass
end
users_controller:
def send_new_password
@user = User.find_by_username(params[:username])
pw = @user.set_password
@user.save
UserMailer.new_password(@user).deliver_now
redirect_to sign_in_path
end
...
def user_params
params.require(:user).permit(... :username, :password_digest, :password, :password_confirmation,... )
end
我在这一行上得到无效的哈希值:'self.password = newpass'。如果我将其更改为“self.password_digest = newpass”,则所有操作都会继续进行,但是在rails控制台中检查“put u.password_digest”会产生“=> nil”。
结果:我们改变了方法。不再在电子邮件中发送密码。
答:
2赞
gef
7/15/2023
#1
这可能不是您想要的答案,但向用户发送密码是一种不好的做法。任何告诉你否则的人都是错误的。
设计宝石有一个专门用于重置密码的模块,其中包括通过电子邮件发送一个链接,供用户恢复和设置自己的密码:https://www.rubydoc.info/github/heartcombo/devise/main/Devise/Models/Recoverable
评论