Sha256: 87f91ddda8f5b4c0914c465df3921d19831b12092383ce18a9a35c0de8f7b6f3

Contents?: true

Size: 1.25 KB

Versions: 6

Compression:

Stored size: 1.25 KB

Contents

module Authentication
  extend ActiveSupport::Concern

  included do
    before_action :require_authentication
    helper_method :authenticated?
  end

  class_methods do
    def allow_unauthenticated_access(**options)
      skip_before_action :require_authentication, **options
    end
  end

  private
    def authenticated?
      Current.session.present?
    end

    def require_authentication
      resume_session || request_authentication
    end


    def resume_session
      Current.session = find_session_by_cookie
    end

    def find_session_by_cookie
      Session.find_by(id: cookies.signed[:session_id])
    end


    def request_authentication
      session[:return_to_after_authenticating] = request.url
      redirect_to new_session_url
    end

    def after_authentication_url
      session.delete(:return_to_after_authenticating) || root_url
    end


    def start_new_session_for(user)
      user.sessions.create!(user_agent: request.user_agent, ip_address: request.remote_ip).tap do |session|
        Current.session = session
        cookies.signed.permanent[:session_id] = { value: session.id, httponly: true, same_site: :lax }
      end
    end

    def terminate_session
      Current.session.destroy
      cookies.delete(:session_id)
    end
end

Version data entries

6 entries across 6 versions & 2 rubygems

Version Path
railties-8.0.0.beta1 lib/rails/generators/rails/authentication/templates/controllers/concerns/authentication.rb
omg-railties-8.0.0.alpha9 lib/rails/generators/rails/authentication/templates/controllers/concerns/authentication.rb
omg-railties-8.0.0.alpha8 lib/rails/generators/rails/authentication/templates/controllers/concerns/authentication.rb
omg-railties-8.0.0.alpha7 lib/rails/generators/rails/authentication/templates/controllers/concerns/authentication.rb
omg-railties-8.0.0.alpha4 lib/rails/generators/rails/authentication/templates/controllers/concerns/authentication.rb
omg-railties-8.0.0.alpha3 lib/rails/generators/rails/authentication/templates/controllers/concerns/authentication.rb