2017-01-03 2 views
1

J'utilise Appartement et Devise gem pour Muti-tenancy and authentication.Devise: Connectez-vous utilisateur et rediriger vers sous-domaine

J'ai une page sign_up dans l'URL de domaine racine (example.com) où j'obtiens les détails de sous-domaine de l'utilisateur.

J'ai besoin de sign_in l'utilisateur après avoir enregistré avec succès l'enregistrement et rediriger vers le nouveau sous-domaine (sub.example.com).

Appartement schemas:

compte => commun pour tous les schémas (publics)

utilisateur => Création séparement pour chaque schémas (privé)

RegistrationController:

class Users::RegistrationsController < Devise::RegistrationsController 

    ... 
    ... 

    def create 
    ActiveRecord::Base.transaction do 
     @account = Account.new(account_params) 
     if @account.valid? 
     # Create & switch to the new tenant 
     Apartment::Tenant.create(@account.subdomain) 
     Apartment::Tenant.switch!(@account.subdomain) 
     @account.save 

     sign_in(:user, @account.user) 
     redirect_to root_url(subdomain: "#{Apartment::Tenant.current}") 
     else 
     render :action => 'new' 
     end 
    end 
    end 

    ... 
    ... 

    protected 
    def account_params 
    params.require(:account).permit(:name, :subdomain, user_attributes: [:first_name, :last_name, :email, :password, :password_confirmation]) 
    end 
end 

Le code ci-dessus redirige avec succès vers le nouveau sous-domaine mais, Il n'est pas signataire dans l'utilisateur bien que je suis signataire dans l'utilisateur avant la redirection.

Quelqu'un m'aider s'il vous plaît à rediriger l'utilisateur en tant que signed_in vers le nouveau sous-domaine.

Merci ..

+0

Est-ce que la redirection vers 'root_url' préserve les cookies de session? – 31piy

+0

@ 31piy, j'ai essayé de supprimer l'authentification dans root_url et essayé d'imprimer la session 'p session ['warden.user.user.key']' dans l'action du contrôleur mais il retourne 'nil' –

+0

Veuillez vérifier si les ID de session sont identiques avant et après la redirection. – 31piy

Répondre

0

Enfin, résoudre ce problème en ajoutant :domain => :all ou l'option rootdomain :domain => 'example.com' dans session_store que j'ai trouvé dans this réponse.

config/initializers/session_store.rb

config.session_store :cookie_store, :key => '_domain_session', :domain => :all 

(ou)

config.session_store :cookie_store, :key => '_domain_session', :domain => 'example.com'