Devise - Sign in On Subdomain
devise, ruby-on-rails, ruby-on-rails-3.2, subdomain
Solution
You just need to share the user session between the subdomain for this, so that one session can be continued with multiple subdomains.
You should modify the `session_store.rb` file in initializes as,
DemoApp::Application.config.session_store :cookie_store, key: '_jcrop_app_session', domain: ".maindomain.com"
Adding the domain will work and careful with the last leading "." (period) which is needed for sub domain.
Problem
I am using devise gem in a rails application with multiple subdomains and multiple schema. Each subdomain is handled by controller, which look like this on `application_controller.rb` : ``` 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 ``` on routes.rb ``` 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 ``` This leads to having multiple sign_in urls for each sub-domains. ``` subdomain1.lvh.me:3000/login/user subdomain2.lvh.me:3000/login/user subdomain3.lvh.me:3000/login/user ... ... etc ``` on 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 ``` When I try login, success login and redirect to subdomain_root_path ``` 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"=>"demouser@domain.com", "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" = 'demouser@domain.com' 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) ``` look, successful login.. view subdomain ``` <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> ``` But on view subdomain `current_user.name` not display, appears only login button. can someone help me? thanks/