質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

解決済

2回答

470閲覧

Bcryptを使用して新規登録機能を実装したのですがパスワードが一致しなくてもエラーにならず通ってしまう。

YukiOG

総合スコア5

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

1グッド

1クリップ

投稿2020/01/10 01:44

編集2020/01/10 02:28

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
DrqYuto👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ruby

1params.require(:user).permit(:name,:email,:password,:pasword_confirmation)

ここでpasword_confirmationとスペルミスになっているためpassword_confirmationの値が伝わらず、しかもpassword_confirmation == nilの場合はチェックをバイパスするため(Rails API)、問題なく通ってしまったようです。

投稿2020/01/10 02:37

maisumakun

総合スコア145123

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

YukiOG

2020/01/11 13:03

そのようでした。 修正したところ無事に機能しました、ありがとうございます!
guest

0

ベストアンサー

コードを見る限り問題なさそうに見えますが、不思議ですね・・・

has_secure_passwordもuser.rbに書いており一致しなかった場合エラーを吐くはずなのですが

これは、

(1) 登録ボタン押下時、"パスワードが一致しません。" のようなメッセージが表示されるが、データが登録されてしまう
(2) 登録ボタン押下時、エラーが出ずにデータが登録されてしまう

のどちらでしょうか?

--

※追記※

コントローラーのコードの掲載、ありがとうございます!

user_params メソッドにタイプミスがあるようです。

誤: pasword_confirmation
正: password_confirmation

おそらく、タイプミスのため画面の password_confirmation がモデルに渡されず、うまく検証できなかったのではと思います。

投稿2020/01/10 02:20

編集2020/01/10 02:39
shinoharat

総合スコア1674

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

shinoharat

2020/01/10 02:21

質問しようと思ったら間違えて回答として投稿してしまいました ご容赦ください・・・(;゚Д゚)
shinoharat

2020/01/10 02:25

それと、念のためコントローラー側のソースコードも見せてもらえると嬉しいです。
YukiOG

2020/01/10 02:25

後者です
YukiOG

2020/01/10 02:29

更新いたしました。確認のほどお願いいたします。
shinoharat

2020/01/10 02:36

user_params メソッドにタイプミスがあるようです。 誤: pasword_confirmation 正: password_confirmation おそらく、タイプミスのため画面の password_confirmation がモデルに渡されず、うまく検証できなかったのではと思います。
YukiOG

2020/01/10 03:10

本当でした;; 一番最初に書いたものでそれについてのテストをしていなかったので完全に見落としてました。 迅速な対応ありがとうございました、以後typoには気をつけたいと思いますmm
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問