3

既存のRails3サイトがあります。このサイトはDeviseを使用してログインします。

次に、別のログインでサブサイトを追加する必要があります。mysite.com/specialにあるとしましょう。/ 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でも可能ですか?もしそうなら、誰かがそれをどうやって進めるかについて何か指針を持っていますか?

4

1 に答える 1

2

結局のところ、これがスコープの目的です。彼らがそれを何と呼んでいるのかを知っていると、すべてがはるかに理にかなっています;)とにかく、上記のQumarasのコメントは実際には正しい方向に進んでいました)、チュートリアルとwikiは一般的に良い情報源です。考えられるアプローチの1つ:

  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' %>
于 2013-01-10T12:17:31.957 に答える