私はユーザーモデルとコントローラーを持っており、ユーザーにはpassword
、password_confirmation
、およびpassword_digest
フィールドがあります。私はbcrypt
ルビーの宝石を使用しました。Rails-ユーザーのパスワードを保存できませんbcrypt
私はユーザーを作成するとき、私は上記のすべてのフィールドを与え、ユーザーは作成されます。しかし、ユーザーのpassword
は保存されません。password_digest
フィールドに16進形式で保存されます。
私はユーザーの名前を編集するだけで、ユーザーフォームを編集するときはフォームに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
ユーザーフォーム?
しかし、Railsの4.xで、で検証されている
password
を無効にするオプションがありますパスワードをデータベースに保存しないでください。セキュリティ上の理由からダイジェストとして保存されます。 – trueinViso実際のパスワードを保存することはなく、ダイジェストのみです。この方法は、データベースがハッキングされている場合、他のサービスのパスワードを推測するハッカーによってユーザーのパスワードを回復することはできません。 – Maxence