- Hey I have a rails api app with devise and jwt installed already and working perfectly fine.
- I installed activeadmin to handle data management but when i try to navigate to /admin i get a message on the screen("You need to sign in or sign up before continuing.") .
- When i try to hit /admin/login , I login as expected but i cant logout to navigate back to /admin/login.
below are my routes
# frozen_string_literal: true
Rails.application.routes.draw do
devise_for :admin_users, ActiveAdmin::Devise.config
ActiveAdmin.routes(self)
resources :categories do
resources :products, shallow: true
end
resources :orders
resources :line_items
resources :carts
root 'store#index', as: 'store_index'
devise_for :users, path: 'api/auth', path_names: {
sign_in: 'login',
sign_out: 'logout',
registration: 'signup'
},
controllers: {
sessions: 'users/sessions',
registrations: 'users/registrations'
}
get '/current_user', to: 'current_user#index'
# For details on the DSL available within this file, see https://guides.rubyonrails.org/routing.html
match '*unmatched_route', via: :all, to: 'store#index', constraints: lambda { |request|
request.path.exclude? 'rails/active_storage'
}
end
below is application.rb
# frozen_string_literal: true
require_relative 'boot'
require 'rails'
# Pick the frameworks you want:
require 'active_model/railtie'
require 'active_job/railtie'
require 'active_record/railtie'
require 'active_storage/engine'
require 'action_controller/railtie'
require 'action_mailer/railtie'
require 'action_mailbox/engine'
require 'action_text/engine'
require 'action_view/railtie'
require 'action_cable/engine'
require 'sprockets/railtie'
# require "rails/test_unit/railtie"
# Require the gems listed in Gemfile, including any gems
# you've limited to :test, :development, or :production.
Bundler.require(*Rails.groups)
module DepotApi
class Application < Rails::Application
# Initialize configuration defaults for originally generated Rails version.
config.load_defaults 6.1
# 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('lib')
# Only loads a smaller set of middleware suitable for API only apps.
# Middleware like session, flash, cookies can be added back manually.
# Skip views, helpers and assets when generating a new resource.
config.api_only = true
config.app_generators.scaffold_controller = :scaffold_controller
# Middleware for ActiveAdmin
config.middleware.use Rack::MethodOverride
config.middleware.use ActionDispatch::Flash
config.middleware.use ActionDispatch::Cookies
config.middleware.use ActionDispatch::Session::CookieStore
end
end
below is applicationController
# frozen_string_literal: true
class ApplicationController < ActionController::Base
skip_before_action :verify_authenticity_token
before_action :configure_permitted_parameters, if: :devise_controller?
rescue_from CanCan::AccessDenied do |_exception|
render json: { error: 'Access denied' }, status: :forbidden
end
def authenticate_admin_user!
redirect_to new_admin_user_session_path
end
protected
def configure_permitted_parameters
devise_parameter_sanitizer.permit(:sign_up, keys: %i[user_name role])
devise_parameter_sanitizer.permit(:sign_in, keys: %i[user_name role])
end
end
- NB. I have made other controllers to inherit from
class ApiController < ActionController::API end
- I have not also changed anything in
config/intializer/active_admin.rb
.
- Any assistance will be highly appreciated.
here is what i get in the console
Started GET "/admin" for ::1 at 2023-07-14 02:01:10 +0300
Processing by Admin::DashboardController#index as HTML
Completed 401 Unauthorized in 11ms (ActiveRecord: 0.0ms | Allocations: 282)
- Update. I have added code in the application controller to work on redirecting unauthenticated users to login but redirecting them to login after logout is not working. below is the code.
def authenticate_admin_user!
if admin_user_signed_in?
admin_root_path
else
new_admin_user_session_path
end
end