Ruby on Rails を用いてユーザーのログイン認証機能を実装しているところです。
emailとpasswordで認証しログイン状態にします。
以下のようにログイン機能をsession_controller.rb
に書いたのですが、間違ったpasswordを入力した際にflashメッセージの表示や画面の遷移が起きませんでした。入力された状態のままのようです。データーベースにある正しいemailとpasswordを送信するとログイン状態になります。
正しいemailと間違ったpasswordを送信する条件のもとbinding.pryでcreateアクションを調べたところ
user = User.find_by(email: params[:email].downcase)
の部分の変数userにはデーターベース内から登録されたユーザーが入っている。if user && user.authenticate(params[:password])
の部分ではfalseである。- flashには何も格納されていない。
以上のことがわかりました。
どうやら
初歩的なこととは思いますがよろしくおねがいします。
該当コード
sessions_controller.rb
ruby:
1class SessionsController < ApplicationController 2 def new 3 end 4 5 def create 6 user = User.find_by(email: params[:email].downcase) 7 if user && user.authenticate(params[:password]) 8 log_in user 9 flash[:notice] = "ログインしました" 10 redirect_to :root 11 else 12 flash.now[:alert] = "メールアドレスかパスワードどちらかが正しくありません" 13 render :new 14 end 15 end 16 17 def destroy 18 session.delete(:user_id) 19 @current_user = nil 20 flash[:alert] = "ログアウトしました" 21 redirect_to :root 22 end 23end
ログイン用のページ
new.html.erb
txt:new.html.erb
1<h1>ログイン</h1> 2 3<%= form_with url: login_path, method: :post do |f| %> 4 <div class="form-group"> 5 <%= f.label :email %> 6 <%= f.email_field :email, class: "form-control" %> 7 </div> 8 <div class="form-group"> 9 <%= f.label :password %> 10 <%= f.password_field :password, class: "form-control" %> 11 </div> 12 13 <%= f.submit "ログインする", class: "btn" %> 14<% end %> 15 16<%= link_to "アカウントを作成する", new_user_path %
application.html.erb flashメッセージ表示部分
<% if flash[:notice] %> <p class="notice"><%= notice %></p> <% end %> <% if flash[:alert] %> <p class="alert"><%= alert %></p> <% end %> <div class="container"> <%= yield %> </div>
環境
ruby 2.5.3p105
rails (5.2.3)
bcrypt (3.1.12)

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2019/05/07 23:05
退会済みユーザー
2019/05/07 23:44
退会済みユーザー
2019/05/09 10:45