2012-03-01 3 views
0

У меня есть приложение с субдоменами. Когда пользователь входит в корневой домен. Я хочу перенаправить его/ее в субдомен фирм. Я использую устройство.redirect_to с параметрами в рельсах

Это то, что я до сих пор

def create 
    subdomain = request.subdomain 
    user = User.find_by_email(params[:user][:email]) 
    if subdomain.present? 
    resource = warden.authenticate!(auth_options) 
    set_flash_message(:notice, :signed_in) if is_navigational_format? 
    sign_in(resource_name, resource) 
    redirect_to statistics_url 
    else 
    redirect_to sign_in_at_subdomain_url(:subdomain => user.firm.subdomain), :params => params 
    end 
end 

def sign_in_at_subdomain 
    resource = warden.authenticate!(auth_options) 
    set_flash_message(:notice, :signed_in) if is_navigational_format? 
    sign_in(resource_name, resource) 
    redirect_to statistics_url 
end 

Когда пользователь Войти корыта регистрационную форму, PARAMS отправляется к созданию действия, что изобрести использование для аутентификации. Как вы видите в моем коде, когда присутствует поддомен, логин работает отлично, но когда он отсутствует, я хочу сделать перенаправление на субдомен и sign_in_at_subdomain.

Как я могу передать parmas форму формы через действие create к действию sign_in_at_subdomain?

ответ

1

Вы можете использовать after_sign_in_path_for, чтобы sign_out пользователь root root и подписал его в поддомен, которому принадлежит. Ниже приведено значение example Rails 3 app with basecamp like subdomains and authentication (с помощью программы «Разработка»).

def after_sign_in_path_for(resource_or_scope) 
    scope = Devise::Mapping.find_scope!(resource_or_scope) 
    subdomain_name = current_user.subdomain.name 
    if current_subdomain.nil? 
    # logout of root domain and login by token to subdomain 
    token = Devise.friendly_token 
    current_user.loginable_token = token 
    current_user.save 
    sign_out(current_user) 
    flash[:notice] = nil 
    home_path = valid_user_url(token, :subdomain => subdomain_name) 
    return home_path 
    else 
    if subdomain_name != current_subdomain.name 
     # user not part of current_subdomain 
     sign_out(current_user) 
     flash[:notice] = nil 
     flash[:alert] = "Sorry, invalid user or password for subdomain" 
    end 
    end 
    super 
end 
+0

Я использовал этот подход, но мне он не нравится. Он хранит токен в базе данных под user.loginable_token. Когда он переходит к valid_user_url, он извлекает пользователя из базы данных и регистрирует его в текущем субдомене. Кажется, это сложно. Я просто хочу передать параметры формы формы входа. –

+0

Это было решение, с которым я закончил. Это лучший. –

Смежные вопросы