我有用戶模型和控制器,用戶有password
,password_confirmation
和password_digest
字段。我曾用bcrypt
紅寶石寶石。Rails-無法保存用戶密碼bcrypt
當我創建用戶時,我提供了上述所有字段並創建了用戶。但用戶的password
不會被保存,它將以十六進制格式保存在password_digest
字段中。
如果我想編輯只是用戶的名字,當我打開編輯用戶表單時,表格有password
和password_confirmation
字段爲空。我不得不再次給一個新的密碼來保存我不想要的用戶。
attr_accessor
沒有幫助。
這裏是我的用戶的控制器:
before_filter :authorize
def create
@user = User.new(user_params)
if @user.valid?
@user.password = params[:user][:password]
@user.password_confirmation = params[:user][:password_confirmation]
@user.save!
redirect_to users_path
else
flash[:error] = @user.errors.full_message
render :new
end
end
def edit
@user = User.find(params[:id])
end
def update
@user = User.find(params[:id])
if @user.update_attributes(user_params)
redirect_to user_path
else
render 'edit'
flash[:error] = @user.errors.full_messages
end
end
private
def user_params
params.require(:user).permit(:first_name, :last_name, :emp_id, :email, :password, :password_confirmation)
rescue
{}
end
繼承人我的用戶模型:
class User < ApplicationRecord
rolify
require 'bcrypt'
has_secure_password
# other field validations here....
validates :password, presence: true
validates :password_confirmation, presence: true
end
和編輯形式:
<%#= other fields here..... %>
<%= f.label :Password_for_this_portal %>
<%= f.password_field :password, :class=>"form-control" %>
<%= f.label :Confirm_passsword_for_this_portal %>
<%= f.password_field :password_confirmation, :class=>"form-control" %>
# ..... submit button here
如何不爲編輯密碼更改再問用戶表單?
這就是它的應該工作,你不會將密碼保存在數據庫中。它出於安全原因被保存爲摘要。 – trueinViso
你永遠不會保存實際的密碼,只能摘要。這樣,如果你的數據庫被黑客攻擊,黑客就無法恢復用戶密碼來推斷其他服務的密碼。 – Maxence