У меня есть модель пользователя и контроллер, у пользователя есть 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
Heres моя модель пользователя:
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