我不确定我做了什么,但是已登录的用户可以访问new_user_session_path和new_user_registration_path。通常在设计中,不应允许用户访问这些路径。如果有所作为,我正在使用cancan。我创建了一个新的rails应用程序并复制了路由并扩展了注册和会话控制器,无法复制问题。
如果有人甚至可以指出我在Devise中重定向的方向,我将不胜感激。
在initializers / devise.rb配置文件中,添加到默认文件的唯一行是:
config.scoped_views = true
如果我能提供任何其他有用的信息,请告诉我。 我正在使用Devise(1.5.3),CanCan(1.6.7)和Rails(3.1.1)
路线档案:
MyApp::Application.routes.draw do
devise_for :users, :controllers => { :sessions => "sessions", :registrations => "registrations" }, :skip => [ :sessions, :registations ] do
get '/signin' => 'sessions#new', :as => :new_user_session
post '/signin' => 'sessions#create', :as => :user_session
delete '/signout' => 'sessions#destroy', :as => :destroy_user_session
get '/signup' => 'registrations#new', :as => :new_user_registration
post '/users' => 'registrations#create', :as => :user_registration
get '/users/cancel' => 'registrations#cancel', :as => :cancel_user_registration
get '/settings' => 'registrations#edit', :as => :edit_user_registration
put '/account' => 'registrations#update'
delete '/users' => 'registrations#destroy'
end
resources :users
match '/contact', :to => 'pages#contact'
root :to => 'pages#contact'
end
扩展设计注册控制器
class RegistrationsController < Devise::RegistrationsController
# POST /resource
def create
build_resource
resource.company = Company.find_by_code(params[:company_code])
resource.role = Role.find_by_name("Basic")
if resource.save
if resource.active_for_authentication?
set_flash_message :notice, :signed_up if is_navigational_format?
sign_in(resource_name, resource)
respond_with resource, :location => after_sign_up_path_for(resource)
else
set_flash_message :notice, :inactive_signed_up, :reason => inactive_reason(resource) if is_navigational_format?
expire_session_data_after_sign_in!
respond_with resource, :location => after_inactive_sign_up_path_for(resource)
end
else
clean_up_passwords resource
respond_with resource
end
end
end
扩展设计会话控制器:
class SessionsController < Devise::SessionsController
layout "sessions"
end
我意识到我可以在控制器操作或之前的过滤器中添加一些代码来检查登录用户并重定向它们。然而,Devise提供了功能,我不应该这样做。我担心这样做可能会忽略一个更大的问题,也许是Devise的配置。
我感谢任何帮助!谢谢!
答案 0 :(得分:1)
设计1.5.3;这不是一个真正的答案,而是关于引擎盖下发生了什么的一些指示 用户登录时用于重定向的过滤器为require_no_authentication 它已在设备的sessions和registrations控制器中调用 由于您继承了这些控制器和过滤器,因此应该应用该行为。
一些可能的行动:
Devise.navigational_formats
答案 1 :(得分:0)
经过大量的搜索和尝试后,我决定重新实现设计并完成了诀窍。我仍然不确定我是如何设法打破功能的。