我正在尝试使用Rails 4.0.0设置Devise 3.1.0。
我已经像我这样配置了路由器:
devise_for :users,
:controllers => {
:registrations => 'users/registrations',
:sessions => 'users/sessions'
},
:path_names => {
:sign_in => 'login',
:sign_out => 'logout',
:sign_up => 'new'
}
new_user_session GET /users/login(.:format) users/sessions#new
user_session POST /users/login(.:format) users/sessions#create
destroy_user_session DELETE /users/logout(.:format) users/sessions#destroy
user_password POST /users/password(.:format) devise/passwords#create
new_user_password GET /users/password/new(.:format) devise/passwords#new
edit_user_password GET /users/password/edit(.:format) devise/passwords#edit
PATCH /users/password(.:format) devise/passwords#update
PUT /users/password(.:format) devise/passwords#update
cancel_user_registration GET /users/cancel(.:format) users/registrations#cancel
user_registration POST /users(.:format) users/registrations#create
new_user_registration GET /users/new(.:format) users/registrations#new
edit_user_registration GET /users/edit(.:format) users/registrations#edit
PATCH /users(.:format) users/registrations#update
PUT /users(.:format) users/registrations#update
DELETE /users(.:format) users/registrations#destroy
我还打开了作用域视图,并覆盖了默认视图和注册控制器:
# config/initializers/devise.rb
config.scoped_views = true
rails generate devise:views users
# app/controllers/users/registrations_controller.rb
#
# NOTE: I created this class, so creating new users could only be done by authenticated users.
#
class Users::RegistrationsController < Devise::RegistrationsController
before_filter :authenticate_user!
prepend_before_filter :authenticate_scope!
skip_before_filter :require_no_authentication
end
# app/controllers/users/sessions_controller.rb
# (currently empty)
class Users::SessionsController < Devise::SessionsController
end
问题:
为什么设计在某些情况下会忽略上面的:path_names
设置?
例如,此方法不会使用上面的:sign_in
设置,并返回错误的路径:
new_session_path(resource_name)
=> /users/sign_in
resource_name
=> user
此方法返回正确的路径:
new_user_session_path
=> /users/login
问题是,Devise内部使用前一种方法,并在用户未登录时保持重定向到错误的路径。
我是否错误配置了某些内容,或者说Devise无法正常工作?这可能是一个Rails 4问题吗?
答案 0 :(得分:0)
我不确定我遇到的问题是什么。 (如果有人知道,我仍然有兴趣知道。)
但是我找到了另一种用设计表达我想要的东西的方式,它似乎工作正常:
devise_for :users,
:controllers => {
:registrations => 'users/registrations'
},
:path_names => {
:sign_up => 'new'
}, :skip => [:sessions]
as :user do
get '/users/login' => 'devise/sessions#new', :as => :new_user_session
post '/users/login' => 'devise/sessions#create', :as => :user_session
match '/users/logout' => 'devise/sessions#destroy', :as => :destroy_user_session,
:via => Devise.mappings[:user].sign_out_via
end
答案 1 :(得分:0)
我认为你试图用错误的功能来解决你的问题,在这个link中告诉你如何为设计编写另一条路线,在我的应用程序中我用这个重新创建了路线:
devise_scope :user do
get '/cadastrar' => 'devise/registrations#new'
get '/entrar' => 'devise/sessions#new'
get '/editar' => 'devise/registrations#edit'
delete '/sair' => 'devise/sessions#destroy'
end
我很高兴工作!