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

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

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

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

Ruby on Rails 6

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

Heroku

HerokuはHeroku社が開発と運営を行っているPaaSの名称です。RubyやNode.js、Python、そしてJVMベース(Java、Scala、Clojureなど)の複数のプログラミング言語をサポートしている。

Ruby on Rails

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

ログイン

ログインは、ユーザーがコンピューターシステムにアクセスするプロセスの事を呼びます。

Q&A

解決済

2回答

1948閲覧

Ruby on railsでログイン機能がうまく実装できない

退会済みユーザー

退会済みユーザー

総合スコア0

Ruby

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

Ruby on Rails 6

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

Heroku

HerokuはHeroku社が開発と運営を行っているPaaSの名称です。RubyやNode.js、Python、そしてJVMベース(Java、Scala、Clojureなど)の複数のプログラミング言語をサポートしている。

Ruby on Rails

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

ログイン

ログインは、ユーザーがコンピューターシステムにアクセスするプロセスの事を呼びます。

0グッド

0クリップ

投稿2020/06/06 05:34

編集2020/06/06 10:46

前提・実現したいこと

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

失礼な点があるかもしれませんがどうぞ宜しくおねがい致します。

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

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

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

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

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

guest

回答2

0

まず、Deviseを使ったログイン処理なのか、Deviseを使わないログイン処理なのかをハッキリすべきです。

Deviseを使うのならば

ruby

1class Users::SessionsController < Devise::SessionsController 2 private 3 def after_sign_in_path_for(resource) 4 if current_user 5 flash[:notice] = "ログイン成功" 6 "/" 7 else 8 flash[:alert] = "ログイン失敗" 9 super 10 end 11 end 12end

で、十分かと思います。
どうしてもrender :newしたい場合は

ruby

1class Users::SessionsController < Devise::SessionsController 2 def new 3 end 4 def create 5 user = User.find_by(email: params[:session][:email]) 6 if user && user.valid_password?(params[:session][:password]) 7 sign_in user 8 flash[:notice] = "ログイン成功" 9 redirect_to("/") 10 else 11 flash[:alert] = "ログイン失敗" 12 render action: :new 13 end 14 end 15end

ですかね

投稿2020/06/06 07:38

編集2020/06/06 08:17
asm

総合スコア15149

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

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

退会済みユーザー

退会済みユーザー

2020/06/06 07:56

def create # user = User.find_by(email: params[:session][:email]) # if user && user.authenticate(params[:session][:encrypted_password]) user = User.find_by(email: params[:email]) if user && user.valid_password?(params[:password]) sign_in user # session[:id] = user.id flash[:notice] = "ログイン成功" redirect_to("/") else flash[:alert] = "ログイン失敗" render action: :new end end としましたがログインに失敗してしまいます・・・・
asm

2020/06/06 08:19

回答を修正しました。
退会済みユーザー

退会済みユーザー

2020/06/06 08:30

session_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 ``` そしてログインボタンを押すと「We're sorry, but something went wrong.」という画面になってしまいました。 なのでheroku logs で出力したログを追記しておきます。
asm

2020/06/06 09:29

rails_12factorもしくはrails_stdout_loggingがGemfileにあるなら消してもよい・・・くらいしか分からないですね
退会済みユーザー

退会済みユーザー

2020/06/06 09:42 編集

rails_12factorを消しましたがうまくいきません・・・・ 問題点がいくつかあると思うので分割して質問を建ててみます! ここまでお付き合いいただきありがとうございました。
guest

0

ベストアンサー

なんかログインできるようになってました・・・・w
多分パソコンを再起動したのが良かったんだと思います(´・ω・`)

投稿2020/06/06 10:50

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2020/06/06 22:50

ただまたログインできなくなってます・・・・ 色々調べます(´・ω・`)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問