设计多个并发登录

时间:2012-12-10 10:13:02

标签: ruby-on-rails devise

我有一个现有的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,如果是这样,有没有人有任何关于如何去做的指示?

1 个答案:

答案 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' %>