Rails- 无法保存用户密码 bcrypt
Rails- not able to save user's password bcrypt
我有用户模型和控制器,用户有 password
、password_confirmation
和 password_digest
字段。我用过 bcrypt
ruby gem.
当我创建用户时,我会提供上述所有字段并创建用户。但是用户的 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
如何在编辑用户表单中不再要求更改密码?
has_secure_password
旨在验证password
和password_digest
。但是,在 Rails 4.x 中,有一个选项可以禁用正在验证的 password
:
class User < ApplicationRecord
has_secure_password :validations => false
end
您可能只能对 create
执行验证,例如:
validates :password, presence: true, :on => :create
validates :password_confirmation, presence: true, :on => :create
我有用户模型和控制器,用户有 password
、password_confirmation
和 password_digest
字段。我用过 bcrypt
ruby gem.
当我创建用户时,我会提供上述所有字段并创建用户。但是用户的 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
如何在编辑用户表单中不再要求更改密码?
has_secure_password
旨在验证password
和password_digest
。但是,在 Rails 4.x 中,有一个选项可以禁用正在验证的 password
:
class User < ApplicationRecord
has_secure_password :validations => false
end
您可能只能对 create
执行验证,例如:
validates :password, presence: true, :on => :create
validates :password_confirmation, presence: true, :on => :create