Bcryptを使って新規登録機能を実装させたのですがform_forのpasswordとpassword_confirmationが違う場合でもアカウントが作成されてしまいます。
passwordカラムにかけたvalidatesはしっかり機能しておりhas_secure_passwordもuser.rbに書いており一致しなかった場合エラーを吐くはずなのですが何故なのでしょうか?
Bcryptに関してのエラーのドキュメントがなく自分では解決できなかったのでお力添えいただけると幸いです。
os: mac
Ruby 2.6.5
RoR 5.2.2
Mysql 5.7
Docker
user.rb
class User < ApplicationRecord validates :name ,presence: true, unless: :uid? validates :comment, length: { maximum: 100} VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+.[a-z]+\z/i validates :email ,presence: true, unless: :uid?, format: {with: VALID_EMAIL_REGEX},uniqueness: true has_secure_password validates :password, presence: true,length: { minimum: 6 } mount_uploader :image, ImageUploader end
users/new.htnl.erb
<% provide(:title,"新規登録")%> <div class="image"> <div class="wrap"> <div id = "sign_up"><h2>新規登録</h2></div> <div class="signup_form"> <%= form_for(@user) do |f| %> <%= render 'layouts/error_messages' , model: f.object %> <%= f.label :name, 'ユーザーネーム' %> <%= f.text_field :name, class: 'login-and-signup' %> <%= f.label :email, 'メールアドレス' %> <%= f.email_field :email, class: 'login-and-signup' %> <%= f.label :password, 'パスワード(6文字以上)'%> <%= f.password_field :password, class: 'login-and-signup' %> <%= f.label :password_confirmation, 'パスワード(もう一度ご入力ください)' %> <%= f.password_field :password_confirmation, class: 'login-and-signup' %> <%= f.submit '登録' , class:'btn login-and-signup-submit' %> <% end %> <h4 class="TwitterAPI">------------または------------</h4> <%= link_to "Twitter認証ログイン" ,"/auth/twitter", method: :post %> </div> </div> </div>
users_controller
class UsersController < ApplicationController def new @user = User.new end def create @user = User.new(user_params) if @user.save session[:user_id] = @user.id flash[:success] = "アカウントを作成しました" redirect_to @user else render 'new' end end def show @user = User.find(params[:id]) end def edit @user = User.find(params[:id]) end def update @user =User.find(params[:id]) if @user.update_attributes(edit_params) flash[:success] ="編集しました" redirect_to @user else render 'edit' end end private def user_params params.require(:user).permit(:name,:email,:password,:pasword_confirmation) end def edit_params params.require(:user).permit(:name,:email,:comment,:image) end end
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/01/11 13:03