2017-01-03 3 views
1

Я использую Квартира и Devise драгоценный камень для Muti-аренда и аутентификация.Devise: Войти и перенаправить на субдомен

У меня есть страница sign_up в URL-адресе корневого домена (example.com), где я получаю данные субдомена от пользователя.

После успешного сохранения записи и перенаправления на новый субдомен мне нужно sign_in (sub.example.com).

квартира Schemas:

Account => Общие для всех схем (Public)

User => Созданный отдельно для каждого схем (Private)

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 

Вышеупомянутый код успешно перенаправляется на новый поддомен, но он не является подписью пользователя, хотя я подписываю его перед перенаправлением.

Любой, пожалуйста, помогите мне перенаправить пользователя как signed_in в новый поддомен.

Спасибо ..

+0

ли перенаправление на 'root_url' сохраняет куки сессии? – 31piy

+0

@ 31piy, я попытался удалить аутентификацию в root_url и попытался распечатать сеанс 'p session ['warden.user.user.key']' в действии контроллера, но он возвращает 'nil' –

+0

. Проверьте, совпадают ли идентификаторы сеанса до и после перенаправления. – 31piy

ответ

0

Наконец, решить эту проблему путем добавления :domain => :all или вариант rootdomain :domain => 'example.com' в session_store, который я нашел в this ответ.

конфигурации/Инициализаторы/session_store.rb

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

(или)

config.session_store :cookie_store, :key => '_domain_session', :domain => 'example.com' 
Смежные вопросы