devise自定义路线和login页面

我试图让自定义路线在我的Rails应用程序(ruby1.9.2与Rails 3)工作。

这是我的config / routes.rb文件

match '/dashboard' => 'home#dashboard', :as => 'user_root' devise_for :user do get "/login", :to => "devise/sessions#new" # Add a custom sign in route for user sign in get "/logout", :to => "devise/sessions#destroy" # Add a custom sing out route for user sign out get "/register", :to => "devise/registrations#new" # Add a Custom Route for Registrations end 

但是,在/ login或/ register上提交表单会转到users / sign_in和users / sign_up。 我如何防止这种情况发生。 或者甚至更好的确保默认情况下,所有对用户/ sign_in等的请求转到相关的路由而不是由Devise生成的默认路由。

另外我怎样才能使login窗体部分包含在任何控制器? 这样我就可以在主页(主页#索引)上login页面,而不是在用户/ sign_in上?

在Mac OS X Snow Leopard上,我在Ruby 1.9.2上使用Devise 1.1.3和Rails 3。

谢谢!

在Devise 1.1.3下面应该可以工作

 devise_for :user, :path => '', :path_names => { :sign_in => "login", :sign_out => "logout", :sign_up => "register" } 

由于:path参数是一个空string,它创build的路由将不会附加“/ user / …”。 :pathnames散列将照顾命名的路线,只要你喜欢。 devise将在内部使用这些路由,所以提交到/login将按照您的意愿工作,而不会把你带到/ user / log_in

要在首页添加login表单,请参阅Devise Wiki中的信息: http ://github.com/plataformatec/devise/wiki/How-To:-Display-a-custom-sign_in-form-anywhere-in-your -app

或者做这样的事情:

  <%= form_tag new_user_session_path do %> <%= text_field_tag 'user[email]' %> <%= password_field_tag 'user[password]' %> <%= submit_tag 'Login' %> 

以下为我工作:

  devise_for :users do get "/login" => "devise/sessions#new" get "/register" => "devise/registrations#new" end 

你只需要不要把你的特殊路线在devise_for块

 match '/dashboard' => 'home#dashboard', :as => 'user_root' get "/login", :to => "devise/sessions#new" # Add a custom sign in route for user sign in get "/logout", :to => "devise/sessions#destroy" # Add a custom sing out route for user sign out get "/register", :to => "devise/registrations#new" # Add a Custom Route for Registrations devise_for :user 

现在/login工程。 / users / sign_in也是如此。

我创build了自己的authentication控制器,并将devise会话控制器路由到我的控制器

 devise_for :users, :controllers => { :sessions => 'auth' }, :path => '/', :path_names => { :sign_in => 'login', :sign_out => 'logout' } 

此代码将添加/login和/注销url。

更多关于这个,你可以在源代码中findhttp://github.com/plataformatec/devise/blob/master/lib/devise/rails/routes.rb

configuration:

  devise_scope :user do get 'profile/edit' => 'devise/registrations#edit', :as => :edit_user_registration get 'profile/cancel' => 'devise/registrations#cancel', :as => :cancel_user_registration end devise_for :users, :path => '', :path_names => { :sign_in => 'login', :sign_out => 'logout', :sign_up => '', :registration => 'register', :edit => 'edit', :cancel => 'cancel', :confirmation => 'verification' } 

路线:

  edit_user_registration GET /profile/edit(.:format) devise/registrations#edit cancel_user_registration GET /profile/cancel(.:format) devise/registrations#cancel new_user_session GET /login(.:format) devise/sessions#new user_session POST /login(.:format) devise/sessions#create destroy_user_session DELETE /logout(.:format) devise/sessions#destroy user_password POST /password(.:format) devise/passwords#create new_user_password GET /password/new(.:format) devise/passwords#new edit_user_password GET /password/edit(.:format) devise/passwords#edit PATCH /password(.:format) devise/passwords#update PUT /password(.:format) devise/passwords#update GET /register/cancel(.:format) registrations#cancel user_registration POST /register(.:format) registrations#create new_user_registration GET /register(.:format) registrations#new GET /register/edit(.:format) registrations#edit PATCH /register(.:format) registrations#update PUT /register(.:format) registrations#update DELETE /register(.:format) registrations#destroy 

在你的routes.rb文件的顶部使用这个

 map.connect "users/:action", :controller => 'users', :action => /[az]+/i 

在索引文件所在的位置使用它。 如果它在您的用户模型上,则使用上述内容或相应地进行更改