我有一个现有的Rails 3网站。该站点使用Devise登录。
现在我需要添加一个带有单独登录的子网站。让我们说它是在mysite.com/special。每个进入/特殊需要的人都需要使用与主站点不同的凭据集登录。这些凭据对主站点无效,但它们必须能够并行登录主站点并保持登录状态。
为了使图片复杂化,“特殊”用户可以模拟常规用户的子集。如果他们冒充假冒,退出模仿等等,他们必须保持登录特殊网站,直到他们明确签署为止。
我最初的想法是为整个子网站使用单独的会话cookie,但我不知道该怎么做。我试着设置这样的东西,但此时几乎是猜测。
scope '/special' do
devise_for :special_users, :controllers => { :sessions => "special/sessions" }, :skip => "registrations", :module => "special_users"
unauthenticated do
as :special_user do
root :to => 'special/sessions#new'
end
end
end
不幸的是,我对Rails有点新鲜,这看起来相当复杂。是否有可能使用Devise,如果是这样,有没有人有任何关于如何去做的指示?
答案 0 :(得分:2)
事实证明,这就是范围。当你知道他们所谓的东西时,一切都变得更有意义;)无论如何,Qumaras上面的评论实际上是在正确的轨道上),教程和维基通常都是很好的信息来源。一种可能的方法:
devise_for :spuser, :controllers => { :sessions => "sp/spusers/sessions"}
as :spuser do # as = equiv. to devise_scope
# add spuser specific items here, such as:
unauthenticated :spuser do
root :to => 'sp/spusers/sessions#new'
end
end
然后,如果您想以普通用户身份登录另一个标签,则可以在控制器中执行此操作。
def impersonate
@user = User.first
sign_in(:user, @user)
redirect_to '/main'
end
并在routes.rb
中连接模拟动作resources :regularcustomers do
member do
get :impersonate
end
end
然后你可以在视图中调用它:
<%= link_to @customer.name, impersonate_regularcustomers_path(@customer), :target => 'impersonationtab' %>