1

通知が表示されるべきではないときに表示されるという問題があります。ログインするためにアプリ内のリンクをクリックすると、何も入力していないにもかかわらず、「無効なユーザー名とパスワードの組み合わせ」という通知が表示されます。メッセージが表示される理由は理解できます。リンクをクリックしたためです。 、一致するユーザー名とパスワードを入力していないため、エラーが発生します。しかし、これを修正する方法がわかりません。ユーザー間違ったコンボを入力したときにエラーが表示されますが、ページが最初に表示されたときは表示されません。

コードでは、「ユーザー」は管理者を指し、顧客は顧客です。どちらのタイプの人にも同じログイン ページを使用しています。

また、私が本当に望んでいるのは、ユーザーが間違った組み合わせを入力した場合、電子メール アドレスがフィールドに残るので、再度入力する必要がないことです。どうすればこれを行うことができますか?

ありがとう!!

更新されたコントローラー コードは次のとおりです。

class SessionsController < ApplicationController
  skip_before_filter :authorize
  def new
  end

 def create
    user = User.find_by_email(params[:email])
    customer = Customer.find_by_email(params[:email])

  if user and user.authenticate(params[:password])
    session[:user_id] = user.id
    redirect_to admin_url

  elsif customer and customer.authenticate(params[:password])
    session[:customer_id] = customer.id
    redirect_to customer_path(session[:customer_id]) 

  else
    render :new, notice: "Invalid email/password combination"
  end
 end

  def destroy
    session[:user_id] = nil
    session[:customer_id] = nil
    redirect_to store_url, notice: "Logged out"
  end
end
4

3 に答える 3

0

最後の else ステートメントを次のように置き換えてみてください。

else
  if params[:email] || params[:password]
    flash[:notice] = "Invalid username/password combination"
    redirect_to login_url
  end
end

これでうまくいくはずです。ユーザーが間違ったパスワードを入力したときにフィールドに残る電子メール アドレスに関する質問については、次のリンクを確認してください

ソリューションの一般的な要点は、コード'render'の代わりに使用'redirect_to'してページをリロードすることです。

于 2012-06-20T09:05:47.317 に答える
0

ログインパラメータがリクエストとともに送信された場合にのみ、フラッシュ通知を設定します。

# ...
else
  flash[:notice] = "Invalid username/password combination" if params[:email] || params[:password]
  redirect_to login_url
end
于 2012-06-20T08:26:04.417 に答える
0

メールを保持するためにリダイレクトするのではなく、すべてをラップしてビューに戻すことをお勧めしif paramsます。render

if params
  if user ...
    ...
  elsif ...
    ...
  else
    render :new
于 2012-06-20T08:37:27.330 に答える