2014-12-19 58 views
1

我使用的是Devise 3.4.0,Rails 4.1.8。基於設計認證狀態的條件顯示

一旦用戶點擊sessions#new,放入他們的用戶名和密碼,然後單擊「登錄」按鈕,將POSTS設置爲/users/sign_in。如果認證成功,用戶將被重定向。但是,如果身份驗證失敗,我需要在視圖中做一些改變。基本上,我們有兩種類型的賬戶:傳統和現代。

現代賬戶沒有問題:它們來自我們的Rails系統,所以我們知道糟糕的登錄是一個糟糕的登錄。他們肯定有一個帳戶,他們只是使用了錯誤的密碼。我想在閃光消息(我也在使用)之外顯示其他幫助文字。

但是,我們已將舊帳戶導入到我們的系統中;我們只是沒有給他們分配密碼。如果他們嘗試使用舊帳戶登錄,我想顯示相同的Flash消息,但不同於Flash消息以外的幫助文本。

我正在尋找像這樣的東西(如果邏輯在視圖中,堅持一分鐘)。最後看兩個條件?

<div class="login_form"> 
    <div class="flash"> 
    <%= render partial: 'layouts/flash_messages', locals: { flash_messages: flash } %> 
    </div> 

    <%= form_for(resource, as: resource_name, url: session_path(resource_name)) do |f| %> 
    <%= f.email_field :email, autofocus: true, placeholder: "Email" %> 
    <%= f.password_field :password, placeholder: "Password" %> 
    <%= f.button "Sign in" %> 
    <% end %> 

    <% if gave_wrong_password? %> 
    <a href="/def456">Reset your password here!</a> 
    <% elsif no_account_exists? %> 
    <a href="/abc123">Create a new account here!</a> 
    <% end %> 
</div> 

基本上,我需要設計(或監獄長)告訴我爲什麼有些事情失敗了。 Devise控制器中是否有可用於獲取該信息的內容?

回答

1

你可以做什麼是正確的了這樣的

#app/controllers/users/sessions_controller.rb 

class Users::SessionsController < Devise::SessionsController 
    layout 'users/login' 

    before_filter :before_signin, :only => [:create] 
    after_filter :after_signin, :only => [:create] 

    def new 
    self.resource = resource_class.new(sign_in_params) 
    clean_up_passwords(resource) 
    respond_with(resource, serialize_options(resource)) 
    end 

    def create 
    self.resource = warden.authenticate!(auth_options) 
    #set_flash_message(:notice, :signed_in) if is_flashing_format? 
    sign_in(resource_name, resource) 
    yield resource if block_given? 
    if session[:user_return_to] 
     respond_with resource, :location => session[:user_return_to] 
    else 
     respond_with resource, :location => after_sign_in_path_for(resource) 
    end 
    end 

    private 
    def after_sign_in_path_for(resource) 
    users_root_path 
    end 

    def after_sign_out_path_for(resource_or_scope) 
    new_user_session_path 
    end 

    def before_signin 
    # do something 
    end 

    def after_signin 
    # do something 
    end 
end 
+1

感謝色器件模型!幾乎在那裏:這給我一種方式檢查用戶是否存在或是一個遺留用戶(我可以在'before_signin'中執行查詢並設置一個實例變量,我可以在我的視圖中使用),但是如何判斷一次認證嘗試由於密碼不正確而失敗? – alaina 2014-12-19 12:04:49

+0

我想我已經想通過檢查幾種不同的狀態來解決這個問題,而不是與守望者戰鬥。這個答案讓我開始了,所以我會接受它。再次感謝! – alaina 2014-12-20 02:26:57

+0

謝謝,我很高興,這指出你在正確的方向 – MZaragoza 2014-12-20 04:14:42