A React library that provides an easy integration of authentication and user management functionality with SuperTokens.
- @prefabs.tech/react-form
- @prefabs.tech/react-i18n
- @prefabs.tech/react-layout
- @prefabs.tech/react-ui
- axios
- primeicons
- react-toastify
Install with npm:
npm install @prefabs.tech/react-user
Install with pnpm:
pnpm install @prefabs.tech/react-user
- Wrap your application code with the
UserWrapper
component
// src/main.tsx
import { UserWrapper } from "@prefabs.tech/react-user";
import config, { userConfig } from "./config";
ReactDOM.createRoot(document.getElementById("root") as HTMLElement).render(
// ...
<UserWrapper config={userConfig}>
<App />
</UserWrapper>
// ...
);
- Use user routes and route handlers from the package in your app's router
// src/Router.tsx
import {
getUserProtectedRoutes,
getUserPublicRoutes,
ProtectedRoutesHandler,
PublicRoutesHandler,
} from "@prefabs.tech/react-user";
import { BrowserRouter as Router, Route, Routes } from "react-router-dom";
export const AppRouter = () => {
return (
<>
<Router>
<Routes>
<Route element={<BasicLayout />}>
{/* auth routes */}
<Route element={<ProtectedRoutesHandler />}> // route handler to perform redirections if user is not authenticated
{/* protected routes from the package including users, invitations, email verification, etc */}
{getUserProtectedRoutes()}
</Route>
{/* unauth routes */}
<Route element={<PublicRoutesHandler />}> // route handler to perform redirections if user is authenticated
{/* public routes from the package including login, signup, forgot password, etc */}
{getUserPublicRoutes()}
</Route>
{/* public routes */}
// ...
</Route>
</Routes>
</Router>
</>
);
};
// src/App.tsx
import { ToastContainer } from "react-toastify";
import { AppRouter } from "./Routers";
export const App = () => {
return (
<>
<AppRouter />
<ToastContainer position="top-center" />
</>
);
};
{
apiBaseUrl: string;
appDomain: string;
supertokens: {
appName: string;
apiDomain: string;
};
supportedRoles: string[]; // array of role strings supported by the app eg ["ADMIN", "SUPERADMIN"]
}
By default, following paths are used
- acceptInvitation:
'/signup/token/:token'
- authCallbackGoogle:
'/auth/callback/google'
- changePassword:
'/change-password'
- emailVerificationReminder:
'/email-verification-reminder'
- emailVerificationVerify:
'/verify-email'
- forgotPassword:
'/forgot-password'
- login:
'/login'
- profile:
'/profile'
- resetPassword:
'/reset-password'
- signup:
'/signup'
- signupFirstUser:
'/signup-first-user'
To customize any path, provide custom value for it in the customPaths config.
{
// ...
customPaths: {
login: '/signin'
signup: '/register'
}
}
{
// ...
homeRoute: "/dashboard"
}
{
// ...
homeRoute: (user: UserType) => "/custom-path"
}
{ // ...
features?: {
forgotPassword?: boolean; // default `true`
signup?: // default true
| false
| {
emailVerification?: boolean; // default `false`
};
signupFirstUser?: boolean; // default `false`, requires `signup` to be `false`
termsAndConditions?: {
display: boolean;
label: ReactNode;
showCheckbox?: boolean;
};
};
}
{
// ...
socialLoginProviders?: SocialLoginType[]; // currently only 'google' supported
}
{
// ...
supertokens: {
apiBasePath?: string; // default `/auth`
sessionConfig?: Session.UserInput;
thirdPartyEmailPasswordConfig?: ThirdPartyEmailPassword.UserInput;
};
}
Custom page components can be used for predefined routes in package by passing routes option to getUserProtectedRoutes
and getUerPublicRoutes
// /src/Router.tsx
...
{getUserProtectedRoutes({
routes: {
emailVerificationReminder: {
element: <CustomEmailVerificationReminderPage />, // custom element for email verification reminder route
},
},
})}
...
{getUserPublicRoutes({
routes: {
login: {
element: <CustomLoginPage />, // custom element for email verification reminder route
},
},
})}
Supported route options by getUserProtectedRoutes
- changePassword
- emailVerificationReminder
- emailVerificationVerify
- profile
Supported route options by getUserPublicRoutes
- acceptInvitation
- authCallbackGoogle
- forgotPassword
- login
- resetPassword
- signup
- signupFirstUser