Я настрою приложение Rails 6 с субдоменами (вроде мультиантаторного подхода, но не используя отдельные схемы).
Я пытаюсь построить FORE_CACT, что я могу установить на моем контроллере приложений, чтобы оценить, есть учетная запись, которая соответствует запросу. Subdomain Call, когда пользователь приземляется на сайте.
Например,
Участник CORM CORP HOMME хочет пойти войти в систему, они приступит к Hammer.lvh.me, когда этот запрос сделан, я хочу, чтобы мой перед фильтром, чтобы увидеть, что запрос соответствует экскурсионному счету и говорит Coolio и перенаправляет их на их соответствующую страницу входа. Если никакой учетной записи не совпадает с поддоменом (т.е. опечатка), я хочу, чтобы они были перенаправлены на мой root_url или страницу регистрации.
У меня сейчас есть это
def verify_account!
if @account = Account.find_by(subdomain: request.subdomain).present?
redirect_to login_url(subdomain: @account.subdomain)
else
redirect_to root_url(subdomain: nil)
end
end
Когда я пытаюсь ударить на сайт с действительным поддоменным поддоном, я действительно могу видеть, что он хочет перенаправить меня на страницу входа в URL, однако я получаю redirected you too many times
в моем браузере.
Не слишком уверен, как приступить к этому исправить? Любая помощь была бы здоровой!
Редактировать # 1 - полное application_controller.rb
class ApplicationController < ActionController::Base
before_action :configure_permitted_parameters, if: :devise_controller?
before_action :verify_account!
# before_action :set_account
def after_sign_in_path_for(resource)
stored_location_for(resource) || dashboard_path
end
def after_sign_out_path_for(resource)
root_path
end
private
def verify_account!
if @account = Account.find_by(subdomain: request.subdomain).present?
redirect_to login_url(subdomain: @account.subdomain)
else
redirect_to root_url(subdomain: nil)
end
end
# def require_account!
# redirect_to root_url(subdomain: nil) if !@account.present?
# flash[:error] = "An account is required to access this page. Please sign up or proceed to your_company.loadze.co to login"
# end
def set_account
@account = Account.find_by(subdomain: request.subdomain)
# byebug
end
def configure_permitted_parameters
devise_parameter_sanitizer.permit(:sign_up, keys: [:f_name, :l_name, account_attributes: [:company_name]])
end
end
Редактировать # 2: Добавляет выход сервера
Started GET "/login" for 127.0.0.1 at 2019-09-30 04:29:16 -0600
Processing by Devise::SessionsController#new as HTML
Account Load (0.2ms) SELECT "accounts".* FROM "accounts" WHERE "accounts"."subdomain" = $1 LIMIT $2 [["subdomain", "tauren_group"], ["LIMIT", 1]]
↳ app/controllers/application_controller.rb:17:in `verify_account!'
Redirected to http://tauren_group.lvh.me:3000/login
Filter chain halted as :verify_account! rendered or redirected
Completed 302 Found in 2ms (ActiveRecord: 0.2ms | Allocations: 865)
1 ответ
Когда приложение перенаправляется на экран входа в систему, он снова перенаправлен, потому что он входит в положение, снова заблокировать. Попробуй это:
def verify_account!
if @account = Account.find_by(subdomain: request.subdomain).present?
return if request.url == login_url(subdomain: @account.subdomain)
redirect_to login_url(subdomain: @account.subdomain)
else
redirect_to root_url(subdomain: nil)
end
end
Похожие вопросы
Новые вопросы
ruby-on-rails
Ruby on Rails - это полнофункциональная платформа веб-приложений с открытым исходным кодом, написанная на Ruby. Он следует популярной модели фреймворка MVC и известен своим подходом «соглашение поверх конфигурации» при разработке приложений.