Rails5.1.3でWebアプリケーション制作の勉強をしています。ログイン機能を作っています。
ログインフォームには、email, password, nickname を入力するようにしています。
emailとpasswordのみでログインはできていました。ログインフォームにnickname入力欄を
新規に作りログインしようとしても上手く認識してくれず困っているので教えていただけないでしょうか?。
@form.nicknameで値を取得するつもりでしたが取得できていないのが原因だと思いますが、
取り出し方がわかりません。
コードは以下のようになっています。
sessions_controller.rb class Customer::SessionsController < Customer::Base skip_before_action :authorize def new if current_customer redirect_to :customer_root else @form = Customer::LoginForm.new render action: 'new' end end def create @form = Customer::LoginForm.new(customer_login) if @form.email.present? customer = Customer.find_by(email_for_index: @form.email.downcase) end if @form.nickname.present? nickname = Customer.find_by(nickname: @form.nickname)-----この値がblankになってしまいます。 end if nickname.present? -------------------------------------------------------ここを認識してくれません。 if Customer::Authenticator.new(customer).authenticate(@form.password) if @form.remember_me? cookies.permanent.signed[:customer_id] = customer.id else cookies.delete(:customer_id) session[:customer_id] = customer.id end flash.notice = 'ログインしました。' redirect_to :customer_root end else flash.now.alert = 'メールアドレスまたはパスワードもしくはニックネームが正しくありません。' render action: 'new' end end
authenticator.rb class Customer::Authenticator def initialize(customer) @customer = customer end def authenticate(raw_password) @customer && @customer.hashed_password && BCrypt::Password.new(@customer.hashed_password) == raw_password end end
new.html.erb <% @title = 'ログイン' %> <div id="login-form"> <h1><%= @title %></h1> <%= form_for @form, url: :customer_session do |f| %> <div> <%= f.label :email, 'メールアドレス' %> <%= f.text_field :email %> </div> <div> <%= f.label :nickname, 'ニックネーム' %> <%= f.text_field :nickname %> </div> <div> <%= f.label :password, 'パスワード' %> <%= f.password_field :password %> </div> <div> <%= f.check_box :remember_me %> <%= f.label :remember_me, '次回から自動でログインする' %> </div> <div> <%= f.submit 'ログイン' %> </div> <% end %> </div>
login_form.rb class Customer::LoginForm include ActiveModel::Model attr_accessor :email, :password, :nickname, :remember_me def remember_me? remember_me == '1' end end
フォームにはemail, password, nicknameの入力欄が表示されています。
入力後にログインをクリックすると「'メールアドレスまたはパスワードもしくはニックネームが正しくありません。'」が
表示されログインできません。どこの部分が悪いのかわからないので困っています。
どなたか教えていただけないでしょうか?宜しくお願いします。
追記
nickname = Customer.find_by(nickname: @form.nickname)の@form.nicknameでフォームに入力した値を
取り出せていないのが原因みたいです。フォームに入力されたnicknameの値をどう取り込めばいいのでしょうか?
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。