前提・実現したいこと
Railsでログインページを作り、ログインしようとしたのですが、登録できたメールアドレス、パスワードを入力しても「ログインに失敗しました」と表示され、ログインできません。
どうすればログインができるようになるのでしょうか?(ユーザー登録はできています)
BCyrptのgemを使って作成しています。
以下関係がありそうなコードです。
ご回答いただけると幸いです。よろしくお願いいたします。
該当のソースコード
users_controller.erb
Ruby
1class UsersController < ApplicationController 2 3 before_action :authorize, except: [:new, :create, :sign_in, :sign_in_process] 4 5 def sign_in 6 @user = User.new 7 render layout: "not_login" 8 end 9 10 def sign_in_process 11 user = User.find_by(email: params[:email]) 12 if user && user.authenticate(params[:password]) 13 user_sign_in(user) 14 flash[:success] = 'ログインしました' 15 redirect_to products_path 16 else 17 flash[:danger] = 'ログインに失敗しました' 18 redirect_to sign_in_path 19 end 20 end 21 22 private 23 def user_params 24 params.require(:user).permit(:name,:email,:password) 25 end 26end
users.rb
Ruby
1class User < ApplicationRecord 2 has_secure_password 3 4 VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+.[a-z]+\z/i 5 validates :email, presence: true, uniqueness: true, format:{ with: VALID_EMAIL_REGEX } 6 validates :password, presence: true, length:{minimum: 8} 7end
sign_in.html.erb
Ruby
1<h3>ログイン</h3> 2 <%= form_for @user, url: sign_in_path do |f| %> 3 <div class="field"> 4 <%= f.email_field :email, placeholder: "メールアドレス" %> 5 </div> 6 <div class="field"> 7 <%= f.password_field :password, placeholder: "パスワード" %> 8 </div> 9 <div class="actions"> 10 <%= f.submit "ログイン" %> 11 </div> 12 <% end %> 13 14 <div class="sign_in_link"> 15 <p>アカウントをお持ちですか? <%= link_to users_new_path do %>新規登録する<% end %></p> 16 </div>
users_helper.rb
Ruby
1module UsersHelper 2 3 def user_sign_in(user) 4 session[:user_id] = user.id 5 end 6 7 def current_user 8 if @current_user.nil? 9 @current_user = User.find_by(id: session[:user_id]) 10 else 11 @current_user 12 end 13 end 14 15 def user_signed_in? 16 current_user.present? 17 end 18 19 def authorize 20 redirect_to sign_in_path unless user_signed_in? 21 end 22 23end
routes.rb
Ruby
1Rails.application.routes.draw do 2 resources :users, only: [:edit, :update] 3 get '/sign_in', to:'users#sign_in', as: :sign_in 4 post '/sign_in', to: 'users#sign_in_process' 5end
試したこと
Userテーブルを作り直したり、サーバーを再起動させましたが特に変化はありませんでした。
DBはSQLiteを使っています。
回答4件
あなたの回答
tips
プレビュー