2013-04-08 14 views
5

私は、複数のサブドメインと複数のスキーマを持つレールアプリケーションでdevise gemを使用しています。これは、各サブドメインのための複数のsign_in URLを有するに至るroutes.rbをDevise - サインインオンサブドメイン

match '/' => 'subdomains#index', :constraints => { :subdomain => /.+/ }, :as => :subdomain_root 

devise_for :users, :skip => [:sessions, :registrations] 

    devise_scope :user do 
    get '/login/user' => 'sesusers#new', :as => :new_session_user 
    post '/signin/user' => 'sesusers#create', :as => :user_session 
    delete '/logout/user' => 'sesusers#destroy', :as => :destroy_user_session 
    post '/send/user' => 'passwordusers#create', :as => :passwordusers_create 
    get '/change_password/user' => 'passwordusers#edit', :as => :passwordusers_edit 
    put '/change/user' => 'passwordusers#update', :as => :passwordusers_update 
    end 

def load_subdomain 
    @account = Account.find_by_subdomain!(request.subdomain) 
end 

def after_sign_in_path_for(resource) 
    #admin login in domain 
    if resource.is_a?(admin) 
     admin_path 
    #user login in subdomain 
    elsif resource.is_a?(user) 
     subdomain_root_path 
    else 
     super 
    end  
    end 

各サブドメインはapplication_controller.rbにこのようになりコントローラによって処理されます。 sesusers_controller.rb

class SesusersController < Devise::SessionsController 
    include Tenantable::Schema::Controller 
    before_filter :load_subdomain 

    def new 
    super 
    end 

    def create 
    logger.info "Logged in" 
    super 
    end 

    def destroy 
    logger.info "Logout success" 
    super 
    end 
end 

subdomain1.lvh.me:3000/login/user 
subdomain2.lvh.me:3000/login/user 
subdomain3.lvh.me:3000/login/user 
... 
... 
etc 

私は、ログインに成功..ビューのサブドメインにログイン、成功のログインを試みると

Started POST "/signin/user" for 127.0.0.1 at 2013-04-08 20:36:04 +0700 
Processing by SesusersController#create as HTML 
    Parameters: {"utf8"=>"Γ£ô", "authenticity_token"=>"DJ/MJnHU5pHwxQQYDSvwyBsawmx 
/9Ms7CXx3me0MBBE=", "user"=>{"email"=>"[email protected]", "password"=>" 
[FILTERED]", "remember_me"=>"0"}, "commit"=>"Login"} 
    Account Load (2.0ms) SELECT "public"."accounts".* FROM "public"."accounts" WH 
ERE "public"."accounts"."subdomain" = 'subdomain1' LIMIT 1 
Logged in 
    User Load (2.0ms) SELECT "users".* FROM "users" WHERE "users"."email" = '[email protected]' LIMIT 1 
    (2.0ms) BEGIN 
    (53.0ms) UPDATE "users" SET "last_sign_in_at" = '2013-04-08 12:55:28.631212' 
, "current_sign_in_at" = '2013-04-08 13:36:04.615889', "sign_in_count" = 4 WHERE 
"users"."id" = 16 
    (7.0ms) COMMIT 
Redirected to http://subdomain1.lvh.me:3000/ 
Completed 302 Found in 1589ms (ActiveRecord: 0.0ms) 


Started GET "/" for 127.0.0.1 at 2013-04-08 20:36:06 +0700 
Processing by SubdomainsController#index as HTML 
    Account Load (2.0ms) SELECT "public"."accounts".* FROM "public"."accounts" WH 
ERE "public"."accounts"."subdomain" = 'subdomain1' LIMIT 1 
    CACHE (0.0ms) SELECT "public"."accounts".* FROM "public"."accounts" WHERE "pu 
blic"."accounts"."subdomain" = 'subdomain1' LIMIT 1 
    (30.0ms) select sum(pg_total_relation_size(table_schema || '.' || table_name 
)) from information_schema.tables where table_schema in ('subdomain') group by tab 
le_schema 
    Rendered subdomains/index.html.erb within layouts/subdomain (81.0ms) 
Completed 200 OK in 170ms (Views: 130.0ms | ActiveRecord: 33.0ms) 

外観をsubdomain_root_pathにリダイレクト

<div class="pull-right"> 
    <div class="btn-group"> 
     <% if user_signed_in? %> 
      <%= link_to current_user.name, '#', { :class => 'btn btn-danger dropdown-toggle', 'data-toggle' => 'dropdown' } %> 
       <ul class="dropdown-menu"> 
        <li> <%= link_to "Dashboard", '#', 'style' =>"color:#fff" %></li> 
       </ul> 
     <% else %> 
      <%= link_to ('<i class="icon-lock icon-white"></i>').html_safe + " Login" +(' <span class="caret"></span>').html_safe , '#', { :class => 'btn btn-danger dropdown-toggle', 'data-toggle' => 'dropdown' } %> 
       <ul class="dropdown-menu"> 
        <li><%= link_to "User", new_session_user_path, 'style' =>"color:#000" %></li> 

       </ul> 
     <% end %> 
    </div> 
</div> 

ビューのサブドメインcurrent_user.nameは表示されず、ログインボタンのみが表示されます。

誰かが私を助けることができますか?あなたはただ一つのセッションは、複数のサブドメインを継続できるように、このサブドメイン間のユーザーセッションを共有する必要が

感謝/

答えて

5

あなたは、サブドメインのために必要とされる「」(ピリオド)、最後の先導で動作するドメインと慎重を追加、

DemoApp::Application.config.session_store :cookie_store, key: '_jcrop_app_session', domain: ".maindomain.com" 

として初期化するにsession_store.rbファイルを変更する必要があります。

+0

おっと、私は '* .lvh.me'のような構成が間違っていました。ありがとう。 –

+0

そのようなものは実際には: 'DemoApp :: Application.config.session_store:cookie_store、key: '_jcrop_app_session'、ドメイン:" .maindomain.com "' –