
Security News
Insecure Agents Podcast: Certified Patches, Supply Chain Security, and AI Agents
Socket CEO Feross Aboukhadijeh joins Insecure Agents to discuss CVE remediation and why supply chain attacks require a different security approach.
@forward-software/react-auth
Advanced tools
Simplify your Auth flow when working with React apps
This React package allows you to streamline the integration of user authentication flows in any React app by providing a single unified interface
npm install @forward-software/react-auth
Create a new object that implements the AuthClient interface provided by this library. The interface includes several lifecycle methods, some of which are optional:
import type { AuthClient } from '@forward-software/react-auth';
// The type for your credentials
type AuthCredentials = {
username: string;
password: string;
};
// The type for your tokens
type AuthTokens = {
authToken: string;
refreshToken: string;
};
const authClient: AuthClient<AuthTokens, AuthCredentials> = {
// Optional: Called when the AuthClient gets initialized
onInit: async (): Promise<AuthTokens | null> => {
// Implement the initialization logic for your client
return null;
},
// Optional: Called after initialization completes
onPostInit: async (): Promise<void> => {
// Implement any post-initialization logic
},
// Optional: Called before login starts
onPreLogin: async (): Promise<void> => {
// Implement any pre-login logic
},
// Required: Called when login is requested
onLogin: async (credentials?: AuthCredentials): Promise<AuthTokens> => {
// Implement the logic required to exchange the provided credentials for user tokens
return {
authToken: '...',
refreshToken: '...'
};
},
// Optional: Called after login completes
onPostLogin: async (isSuccess: boolean): Promise<void> => {
// Implement any post-login logic
},
// Optional: Called before refresh starts
onPreRefresh: async (): Promise<void> => {
// Implement any pre-refresh logic
},
// Optional: Called when refresh is requested
// The current tokens are passed as the first argument
onRefresh: async (currentTokens: AuthTokens, minValidity?: number): Promise<AuthTokens> => {
// Implement the logic required to refresh the current user tokens
return {
authToken: '...',
refreshToken: '...'
};
},
// Optional: Called after refresh completes
onPostRefresh: async (isSuccess: boolean): Promise<void> => {
// Implement any post-refresh logic
},
// Optional: Called before logout starts
onPreLogout: async (): Promise<void> => {
// Implement any pre-logout logic
},
// Optional: Called when logout is requested
onLogout: async (): Promise<void> => {
// Implement the logic required to invalidate the current user tokens
},
// Optional: Called after logout completes
onPostLogout: async (isSuccess: boolean): Promise<void> => {
// Implement any post-logout logic
}
};
The AuthClient instance can be used directly with the createAuth function:
import { createAuth } from '@forward-software/react-auth';
export const { AuthProvider, useAuthClient, authClient: enhancedAuthClient } = createAuth(authClient);
The createAuth function returns:
AuthProvider, the context Provider component that should wrap your app and provide access to your AuthClientuseAuthClient, the hook to retrieve and interact with your AuthClientauthClient, the enhanced authentication client instanceThe context Provider component that should wrap your app and provide access to your AuthClient, this component also accepts 2 additional props
ErrorComponent, displayed when the AuthClient initialization failsLoadingComponent, displayed while the AuthClient is being initializedThe createAuth function wraps your AuthClient implementation with an EnhancedAuthClient that provides additional functionality:
isInitialized, a boolean indicating if the AuthClient has been initializedisAuthenticated, a boolean indicating if the login process has been successful and the user is authenticatedtokens, the current tokens returned by the login or the refresh processinit(), initialize the AuthClient (N.B. this shouldn't be called if using AuthProvider - see above)login(credentials), start the login processrefresh(), refresh the current tokenslogout(), logout and invalidate the current tokenson(eventName, listenerFn), subscribe to eventName events emitted by the AuthClientoff(eventName, listenerFn), unsubscribe from eventName events emitted by the AuthClientsubscribe(() => { }), subscribe to AuthClient state changesgetSnapshot(), returns the current state of the AuthClientSetup React components to interact with the AuthClient using the createAuth function exported by this library
import { createAuth } from '@forward-software/react-auth';
export const { AuthProvider, useAuthClient } = createAuth(authClient);
the createAuth function returns:
AuthProvider, the context Provider component that should wrap your app and provide access to your AuthClientuseAuthClient, the hook to retrieve and interact with your AuthClientThe context Provider component that should wrap your app and provide access to your AuthClient, this component also accepts 2 additional props
ErrorComponent, displayed when the AuthClient initialization failsLoadingComponent, displayed while the AuthClient is being initializedThe examples folder contains some examples of how you can integrate this library in your React app.
This library has been inspired by react-keycloak and similar libraries.
MIT
Made with ✨ & ❤️ by ForWarD Software and contributors
If you found this project to be helpful, please consider contacting us to develop your React and React Native projects.
FAQs
Simplify your Auth flow when working with React apps
We found that @forward-software/react-auth demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 2 open source maintainers collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
Socket CEO Feross Aboukhadijeh joins Insecure Agents to discuss CVE remediation and why supply chain attacks require a different security approach.

Security News
Tailwind Labs laid off 75% of its engineering team after revenue dropped 80%, as LLMs redirect traffic away from documentation where developers discover paid products.

Security News
The planned feature introduces a review step before releases go live, following the Shai-Hulud attacks and a rocky migration off classic tokens that disrupted maintainer workflows.