2012-06-20 57 views
1

我遇到了不應該顯示的通知問題。當我點擊我應用中的鏈接登錄時,即使我沒有輸入任何內容,它也會閃爍「無效的用戶名/密碼組合」通知。我明白爲什麼我會收到此消息 - 這是因爲當我點擊鏈接時,我沒有輸入一個匹配的用戶名和密碼,所以錯誤觸發。但我不知道如何解決這個問題。我希望當用戶確實鍵入錯誤的組合時出現錯誤,但在頁面首次出現時不會顯示。Rails - 當點擊登錄鏈接時頁面上出現不正確的用戶名/密碼通知

在代碼中,「用戶」是指管理員,而客戶是客戶。我爲兩種類型的人使用相同的登錄頁面。

另外,我真正喜歡的是,當用戶鍵入錯誤的組合時,他們的電子郵件地址將留在該字段中,以便他們不必再次輸入。我會如何去做這件事?

謝謝!

下面是更新控制器代碼:

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 

回答

0

只閃光通知設置時,在那裏與請求發送登錄參數:

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

這不會在頁面上創建一個閃光燈 - 我試着用redirect_to和渲染,並且都有相同的結果 - 任何想法是什麼造成的?謝謝! – ecs

0

我建議你在if params包一切,重新render視圖而不是重定向來保存電子郵件。

if params 
    if user ... 
    ... 
    elsif ... 
    ... 
    else 
    render :new 
+0

謝謝,這對於呈現他們輸入到字段中的信息非常適用,但當輸入錯誤的登錄信息時,「無效的電子郵件/密碼」通知不會顯示。這是我得到的線:其他 渲染:新,通知:「無效的電子郵件/密碼組合」 結束 - 我不明白爲什麼它不工作? – ecs

+0

務必在渲染之前將'flash [:notice] ='任務更新失敗。'':new。它爲我工作。 –

0

嘗試用這種替代你的最後一個else語句:

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

這應該做的伎倆。在問候你對留在當用戶輸入的密碼不正確場的電子郵件地址的問題,檢查此鏈接:here

解決方案的一般要點是在你的代碼中使用'render'而不是'redirect_to'重新加載頁。

+0

如果我在渲染最後一行時使用這個:new,它會將我帶到創建視圖 - 任何想法爲什麼? – ecs

+0

解決了這個問題 - 我只需要在上面的if語句中添加一個'else'來重定向到登錄url。然而,現在的問題是,當用戶正確登錄時,他們被賦予了'無效的用戶名'等。他們登錄成功時出錯。 – ecs

+0

這意味着即使身份驗證成功,else語句仍在運行。你能發佈你的新代碼嗎? –

相關問題