42

我试图让自定义路由在我的 Rails 应用程序(Ruby 1.9.2 with 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。我该如何防止这种情况发生。或者甚至更好地确保默认情况下所有对 users/sign_in 等的请求都转到相关路由,而不是 Devise 生成的默认路由。

另外,如何使登录表单成为一部分以将其包含在任何控制器中?这样我就可以在主页 (home#index) 上而不是在 users/sign_in 上拥有登录页面?

我在 Mac OSX Snow Leopard 上的 Ruby 1.9.2 上使用带有 Rails 3 的 Devise 1.1.3。

谢谢!

4

6 回答 6

79

使用 Devise 1.1.3 以下应该可以工作

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

它创建的路由不会附加“/user/...”,因为:path参数是空字符串。:pathnames哈希将负责根据您的喜好命名路由。设计将在内部使用这些路由,因此提交到 /login 将按照您的意愿工作,而不是将您带到 /user/log_in

要将登录表单添加到您的首页,请访问 Devise Wiki: http ://github.com/plataformatec/devise/wiki/How-To:-Display-a-custom-sign_in-form-anywhere-in-your -应用程序

或者做这样的事情:

 <%= form_tag new_user_session_path do %>
  <%= text_field_tag 'user[email]' %>
  <%= password_field_tag 'user[password]' %>
 <%=  submit_tag 'Login' %>
于 2010-10-02T10:18:35.793 回答
6

以下对我有用:

  devise_for :users do
    get "/login" => "devise/sessions#new"
    get "/register" => "devise/registrations#new"
  end
于 2011-08-07T14:58:45.727 回答
3

你只需要不要把你的特殊路线放在 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 也是。

于 2010-09-30T04:38:57.330 回答
3

配置:

  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
于 2015-12-13T07:11:36.443 回答
1

我创建了自己的身份验证控制器并将设计会话控制器路由到我的控制器

devise_for :users, 
:controllers => {
    :sessions => 'auth' },

:path => '/',

:path_names => {
    :sign_in  => 'login',
    :sign_out => 'logout' }

此代码将添加 /login 和 /logout url。

有关此的更多信息,您可以在源代码http://github.com/plataformatec/devise/blob/master/lib/devise/rails/routes.rb中找到

于 2010-10-02T08:25:01.097 回答
0

在您的 routes.rb 文件顶部使用它

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

在您的索引文件所在的位置使用它。如果它在您的用户模型上,请使用上述或相应更改

于 2010-09-30T01:13:36.587 回答