前提・実現したいこと
teratailの皆様のおかげでなんとかサービス完成まであと僅かのところまで漕ぎつけました。
Ruby on railsでログイン機能を実装したいです。
発生している問題
emailとパスワードが同じレコード内にあるのにログインに失敗する。
エラーメッセージ
メールアドレスをionamatadayo@ionamatadayo.com
パスワードをionamatadayoとして新規登録をしました。
herokuでusersテーブルの中身を見ると
id | email | encrypted_password | created_at | updated_at ----+-------------------------------+--------------------------------------------------------------+----------------------------+---------------------------- 7 | ionamatadayo@ionamatadayo.com | $2a$11$RNrj9PylAD8h0wsSiKQtg.bEUTlpO0NGLx8Mix74ArLPZJgFdaj1G | 2020-06-06 04:54:16.094003 | 2020-06-06 04:54:16.094003
となっているのでデータの登録は済んでいるはずです。
そこでログインボタンを押すと
ログイン失敗
と表示されます。(ちなみにこれはフラッシュメッセージです。)
該当のソースコード
app/controllers/users/registrations_controller.rb(会員登録処理のコントローラー)
class Users::RegistrationsController < Devise::RegistrationsController def new @user = User.new end def create @user = User.new(user_params) if @user.save flash[:notice] = "会員登録完了" redirect_to("/") else flash[:alert] = "会員登録失敗" render action: :new end end private def user_params params.require(:@user).permit(:email, :password) end end
app/views/users/registrations/new.html.erb(会員登録フォーム)
<h2>新規登録</h2> <% @user = User.new unless @user %> <%= form_for :@user,:url => {controller: "registrations", action: "create" } do |f| %> <%= f.email_field :email %> <% if @minimum_password_length %> <em>(<%= @minimum_password_length %>字以上で記入)</em> <% end %> <%= f.password_field :password %> <%= f.password_field :password_confirmation %> <%= f.submit "新規登録!" %> <% end %>
app/controllers/users/sessions_controller.rb(ログイン処理のコントローラー)
class Users::SessionsController < Devise::SessionsController def new end def create @user = User.find_by(email: params[:session][:email]) if @user && @user.valid_password?(params[:session][:password]) sign_in @user flash[:notice] = "ログイン成功" redirect_to("/") else flash[:alert] = "ログイン失敗" render action: :new end end end
app/views/users/sessions/new.html.erb(ログインフォーム)
<h2>ログイン</h2> <%= form_for :session,:url => {controller: "sessions", action: "create" } do |f| %> <%= f.email_field :email, autofocus: true, autocomplete: "email" %> <%= f.password_field :password, autocomplete: "current-password" %> <% if devise_mapping.rememberable? %> <%= f.check_box :remember_me %> <% end %> <%= f.submit "ログイン!" %> <% end %>
models/user.rb
class User < ApplicationRecord devise :database_authenticatable, :registerable, :recoverable, :rememberable, :validatable validates :email, uniqueness: true end
補足情報
Windows 10 home 64ビット
ruby 2.6.6
Ruby on rails 6.0.3.1
PostgreSQL 13beta1
テキストエディタ Atom
失礼な点があるかもしれませんがどうぞ宜しくおねがい致します。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2020/06/06 07:56
2020/06/06 08:19
退会済みユーザー
2020/06/06 08:30
2020/06/06 09:29
退会済みユーザー
2020/06/06 09:42 編集