Skip to content

CISCODE-MA/AuthKit-UI

@ciscode/ui-authentication-kit

Production-ready authentication UI components for React applications

npm version License: ISC

Complete authentication solution with built-in pages, RBAC support, and session management. Drop-in components that work with any backend API.

✨ Features

  • πŸ” Pre-built Auth Pages - Login, Register, Password Reset, Profile
  • πŸ›‘οΈ RBAC Support - Role-based access control with permissions
  • πŸ”„ Session Management - Automatic token refresh and expiration handling
  • 🎨 Customizable - Headless components, bring your own styles
  • β™Ώ Accessible - ARIA-compliant, keyboard navigation
  • 🌍 i18n Ready - Multi-language support via @ciscode/ui-translate-core
  • πŸ“± Responsive - Mobile-first design
  • πŸš€ TypeScript - Full type safety

πŸ“¦ Installation

npm install @ciscode/ui-authentication-kit
# or
yarn add @ciscode/ui-authentication-kit
# or
pnpm add @ciscode/ui-authentication-kit

Peer Dependencies

npm install react react-dom react-router-dom axios jwt-decode react-cookie lucide-react @ciscode/ui-translate-core

πŸš€ Quick Start

1. Wrap your app with AuthProvider

import { AuthProvider } from '@ciscode/ui-authentication-kit';
import { BrowserRouter } from 'react-router-dom';

function App() {
  return (
    <BrowserRouter>
      <AuthProvider
        config={{
          apiUrl: 'https://api.example.com',
          loginPath: '/auth/login',
          registerPath: '/auth/register',
          profilePath: '/auth/profile',
          logoutPath: '/auth/logout',
          redirectAfterLogin: '/dashboard',
          redirectAfterLogout: '/',
        }}
      >
        {/* Your app routes */}
      </AuthProvider>
    </BrowserRouter>
  );
}

2. Use authentication state

import { useAuthState } from '@ciscode/ui-authentication-kit';

function Dashboard() {
  const { user, isAuthenticated, logout } = useAuthState();

  if (!isAuthenticated) {
    return <div>Please log in</div>;
  }

  return (
    <div>
      <h1>Welcome, {user?.name}!</h1>
      <button onClick={logout}>Logout</button>
    </div>
  );
}

3. Protect routes with permissions

import { RequirePermissions } from '@ciscode/ui-authentication-kit';

function AdminPanel() {
  return (
    <RequirePermissions
      fallbackpermessions={['admin.view', 'admin.edit']}
      fallbackRoles={['super-admin']}
      redirectTo="/unauthorized"
    >
      <div>Admin Content</div>
    </RequirePermissions>
  );
}

πŸ“š Documentation

πŸ§ͺ Testing

  • Tests are centralized under the tests/ folder.
  • Vitest is configured with jsdom and a global setup in tests/setup.ts.
  • Run tests: npm test
  • Run coverage: npm run test:cov

Folder layout:

tests/
  components/
  context/
  hooks/
  utils/
  setup.ts

🎯 Key Components

Component Description
AuthProvider Root provider for authentication state and routing
ProfilePage User profile management UI
RequirePermissions Permission-based route guard
RbacProvider Role-based access control context

πŸͺ Core Hooks

Hook Description
useAuthState() Access auth state (user, isAuthenticated, login, logout)
useHasRole(role) Check if user has a specific role
useHasModule(module) Check if user has access to a module
useCan(permission) Check if user has a permission
useGrant() Access RBAC grant management

πŸ” RBAC Example

import { RbacProvider, useHasRole, useCan } from '@ciscode/ui-authentication-kit';

function App() {
  return (
    <RbacProvider>
      <Dashboard />
    </RbacProvider>
  );
}

function Dashboard() {
  const isAdmin = useHasRole('admin');
  const canEditUsers = useCan('users.edit');

  return (
    <div>
      {isAdmin && <AdminPanel />}
      {canEditUsers && <EditButton />}
    </div>
  );
}

🌐 Internationalization

The kit integrates with @ciscode/ui-translate-core for multi-language support:

import { TranslateProvider } from '@ciscode/ui-translate-core';

<TranslateProvider locale="en" translations={translations}>
  <AuthProvider config={config}>
    <App />
  </AuthProvider>
</TranslateProvider>;

πŸ› οΈ Development

# Install dependencies
npm install

# Build the library
npm run build

# Run tests
npm test

# Run tests with coverage
npm run test:cov

# Type check
npm run typecheck

# Lint
npm run lint

# Format code
npm run format:write

🀝 Contributing

We welcome contributions! Please see CONTRIBUTING.md for details.

  1. Fork the repository
  2. Create a feature branch from develop
  3. Make your changes with tests
  4. Submit a PR to develop

πŸ“„ License

ISC Β© CISCODE

πŸ”— Links

πŸ“Š Browser Support

  • Chrome (latest)
  • Firefox (latest)
  • Safari (latest)
  • Edge (latest)

πŸ™ Acknowledgments

Built with modern React patterns and best practices. Designed for enterprise applications.