2013-10-18 60 views
0

我使用devise gem來驗證用戶在我的rails應用程序中,並且決定使用根頁面作爲登錄頁面。我資助解決方案,如果登錄不成功(代碼如下),如何將用戶重定向到根網址,但我找不到如何設計,它應該使用根網址登錄頁面而不是單獨登錄頁面/ users/sign_in如何刪除設計中的單獨登錄頁面

class CustomFailure < Devise::FailureApp 
    def redirect_url 
    if warden_options[:scope] == :user 
     root_path 
    else 
     root_path 
    end 
    end 
    def respond 
    if http_auth? 
     http_auth 
    else 
     redirect 
    end 
    end 
end 
+0

要在首頁上顯示登錄表單或您的完整主頁只是一個登錄表單嗎? –

回答

2

如果您想在登錄表單或其他頁面中使用登錄表單,則必須編寫自己的表單。 但您可以複製正常的設計登錄表單的代碼。

爲了得到色器件的觀點,你可以在控制檯寫:

rails generate devise:views 

然後你就可以複製從應用程序/視圖的色器件登錄表單/設計/會話/ new.html.erb並粘貼在視圖中或部分。

這可能是這樣的:

<%= form_for(User.new, :url => user_session_path) do |f| %> 
    <%= f.text_field :email %> 
    <%= f.password_field :password %> 
    <%= f.check_box :remember_me %> 
    <%= f.label :remember_me %> 
    <%= f.submit 'Sign in' %> 
    <%= link_to "Forgot your password?", new_password_path('user') %> 
<% end %> 

您更改變量。新這是impotant或者你必須定義你想使用的形式控制變量。在我的例子中,我寫了User.new。

欲瞭解更多信息,請參閱這篇Howto:如何 https://github.com/plataformatec/devise/wiki/How-To:-Display-a-custom-sign_in-form-anywhere-in-your-app

+0

請記住發佈有關需要包含的application_helper資源才能完成此工作 –

+0

我已經在我的一個rails項目中測試了此解決方案,並且其工作原理沒有任何其他配置。你到底意味着什麼? – mgluesenkamp

+0

哦,等等,你用了不同的表單,對不起。默認情況下,Devise在窗體上調用一個名爲「resource」的實例變量。這就是你如何將Devise gem用於不同的型號/控制器。問題是,如果您想將表單移動到不同的模型/控制器上,您需要能夠再次定義資源。爲了解決這個問題,大多數人把資源定義爲這樣的application_helper.rb: –

0

如果你有你的工作形式,你可能會尋找關於制定路線信息,特別是有關的路徑:

devise_for :users, :path => '', :controllers => {:sessions => 'sessions', :registrations => 'registrations'}, :path_names => { :sign_in => 'login', :password => 'forgot', :confirmation => 'confirm', :unlock => 'unblock', :registration => 'register', :sign_up => 'new', :sign_out => 'logout'} 

更多的信息在這裏: https://github.com/plataformatec/devise/wiki/How-To:-Change-the-default-sign_in-and-sign_out-routes

相關問題