Skip to content

Middleware with RackAdapter does not work: "uninitialized constant Authlogic::ControllerAdapters::RackAdapter" #773

Description

@pyetrosafe

ISSUES THAT DO NOT FOLLOW THIS TEMPLATE WILL BE CLOSED IMMEDIATELY.

  • This is not a usage question.
    • Our volunteers' time is limited, so please ask usage questions on
      StackOverflow.
  • This is not a security issue.
  • This bug is reproducible with a clean install of authlogic
  • I am committed to fixing this in a reasonable amount of time, and
    responding promptly to feedback.

Expected Behavior

I'm trying to create a middleware to manage user permissions. To do this, I would like to use Authlogic and retrieve the logged-in user from the session, or if not, take action in this case.

Actual Behavior

I'm using the most recent version of Authlogic (Authlogic 6.4.3), Ruby 3.3.5, and Rails 7.1.4.

I couldn't find instructions on how to use Authlogic with Rack in any tutorial, but I found comments in the file "/lib/authlogic/controller_adapters/rack_adapter.rb".

# Adapter for authlogic to make it function as a Rack middleware.
# First you'll have write your own Rack adapter where you have to set your cookie domain.
#
# class YourRackAdapter < Authlogic::ControllerAdapters::RackAdapter
# def cookie_domain
# 'your_cookie_domain_here.com'
# end
# end
#
# Next you need to set up a rack middleware like this:
#
# class AuthlogicMiddleware
# def initialize(app)
# @app = app
# end
#
# def call(env)
# YourRackAdapter.new(env)
# @app.call(env)
# end
# end
#
# And that is all! Now just load this middleware into rack:
#
# use AuthlogicMiddleware
#
# Authlogic will expect a User and a UserSession object to be present:
#
# class UserSession < Authlogic::Session::Base
# # Authlogic options go here
# end
#
# class User < ApplicationRecord
# acts_as_authentic
# end
#

I followed the steps described here, but it returns an error:

uninitialized constant Authlogic::ControllerAdapters::RackAdapter

Replicable files:

# config/application.rbrequire_relative"boot"require"rails/all"require_relative'../app/middlewares/rules_permissions'# Require the gems listed in Gemfile, including any gems# you've limited to :test, :development, or :production.Bundler.require(*Rails.groups)moduleOnlineCoursesclassApplication < Rails::Application# Initialize configuration defaults for originally generated Rails version.config.load_defaults7.1# Please, add to the `ignore` list any other `lib` subdirectories that do# not contain `.rb` files, or that should not be reloaded or eager loaded.# Common ones are `templates`, `generators`, or `middleware`, for example.config.autoload_lib(ignore: %w(assetstasks))# config.autoload_paths += %W(#{config.root}/lib)# Configuration for the application, engines, and railties goes here.## These settings can be overridden in specific environments using the files# in config/environments, which are processed later.## config.time_zone = "Central Time (US & Canada)"# config.eager_load_paths << Rails.root.join("extras")# config.time_zone = "America/Sao_Paulo"config.time_zone=ActiveSupport::TimeZone[Time.now.strftime('%z').gsub('0','').to_i]config.active_record.default_timezone=:localconfig.assets.compile=trueconfig.middleware.useRulesPermissionsendend
# app/middlewares/rules_permissions_rack_adapter.rbclassRulesPermissionsRackAdapter < Authlogic::ControllerAdapters::RackAdapterdefcookie_domain# 'your_cookie_domain_here.com''/'endend
# app/middlewares/rules_permissions.rbclassRulesPermissionsdefinitialize(app)@app=appenddefcall(env)RulesPermissionsRackAdapter.new(env)puts'Play here';ifUserSession.find# do somethingend@app.call(env)endend
# app/models/user.rbclassUser < ApplicationRecordacts_as_authenticdo |c|
c.crypto_provider=Authlogic::CryptoProviders::BCryptc.require_password_confirmation=trueend# Validate email, login, and password as you see fit.## Authlogic < 5 added these validation for you, making them a little awkward# to change. In 4.4.0, those automatic validations were deprecated. See# https://github.com/binarylogic/authlogic/blob/master/doc/use_normal_rails_validation.mdvalidates:email,format: {with: /@/,message: "should look like an email address."},length: {maximum: 100},uniqueness: {case_sensitive: false,if: :will_save_change_to_email?}validates:password,confirmation: {if: :require_password?},length: {minimum: 8,if: :require_password?}validates:password_confirmation,length: {minimum: 8,if: :require_password?}end
# app/models/user_session.rbclassUserSession < Authlogic::Session::Baseend

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions