简体   繁体   中英

Rails 5 Using Devise and acts_as_tenant

I have an application that's using Devise to handle sign in/registration. I'm also using acts_as_tenant. I need to ensure a Tenant is set every time someone goes to register/sign in. For acts as tenant to work, the tenant must be set prior to authentication. Right now I'm using a before_action on my ApplicationController but the issue is that method gets called even if someone has invalid credentials etc, and I'm trying to avoid having to write if statements in the method to figure out if I have a valid user or not.

What is the best way to achieve this? Anyone in a similar situation?

If you need to set your tenant before authenticating with Devise, you need to use acts_as_tenant 's manual tenant setting method so that you can control the timing.

# application_controller.rb

class ApplicationController < ActionController::Base
  protect_from_forgery with: :exception

  # tell acts_as_tenant you'll manually set the tenant 
  set_current_tenant_through_filter 

  # manually set the tenant before Devise auth
  prepend_before_action :set_current_tenant_by_subdomain

  # Devise auth as usual but after tenant is set
  before_action :authenticate_user!


  private

  def set_current_tenant_by_subdomain
    current_organization = Organization.find_by_subdomain(request.subdomain)
    set_current_tenant(current_organization)
  end
end

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM