gpt4 book ai didi

ruby-on-rails - 设计多个并发登录

转载 作者:行者123 更新时间:2023-12-04 05:55:10 26 4
gpt4 key购买 nike

我有一个现有的 Rails 3 站点。本网站使用 Devise 登录。

现在我需要添加一个带有单独登录名的子站点。假设它位于 mysite.com/special。每个访问/special 的人都需要使用与主站点不同的凭据集登录。这些凭据对主站点无效,但它们必须同时能够登录到主站点并在两个站点中保持登录状态。

使情况稍微复杂一点的是,“特殊”用户能够冒充一部分普通用户。如果他们真的要冒充、退出冒充等等,他们必须保持登录到特殊站点,直到他们在那里明确退出。

我最初的想法是为整个子站点使用一个单独的 session 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 甚至有可能吗?如果可以,有人对如何去做有任何指示吗?

最佳答案

事实证明,这就是作用域的用途。当你知道他们怎么调用它时,一切都变得更有意义了;)无论如何,Qumaras 上面的评论实际上是在正确的 rails 上),而且教程和维基通常是很好的信息来源。一种可能的方法:

  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

然后,如果您想以普通用户身份登录另一个选项卡,您可以在 Controller 中执行此操作。

def impersonate
@user = User.first
sign_in(:user, @user)
redirect_to '/main'
end

然后将模拟 Action 连接到 routes.rb

resources :regularcustomers do
member do
get :impersonate
end
end

然后你可以在 View 中调用它:

<%= link_to @customer.name, impersonate_regularcustomers_path(@customer), :target => 'impersonationtab' %>

关于ruby-on-rails - 设计多个并发登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13798834/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com