Integrate Hanko with React
Learn how to quickly add authentication and user profile in your React app using Hanko.
Install @teamhanko/hanko-elements
Once you’ve initialized your React app, installing hanko-elements provides you with access to the prebuilt components: hanko-auth
and hanko-profile
.
Add the Hanko API URL
Retrieve the API URL from the Hanko console and place it in your .env file.
If you are self-hosting you need to provide the URL of your running Hanko backend.
Add <hanko-auth>
component
The <hanko-auth>
web component adds a login interface to your app. Begin by importing the register
function from @teamhanko/hanko-elements
into your React component. Call it with the Hanko API URL as an argument to register <hanko-auth>
with the browser’s CustomElementRegistry. Once done, include it in your JSX.
Define event callbacks
The Hanko client from @teamhanko/hanko-elements
lets you “listen” for specific events. It simplifies the process of subscribing to events, such as user logins.
By now, your sign-up and sign-in features should be working. You should see an interface similar to this 👇
Add <hanko-profile>
component
The <hanko-profile>
component provides an interface, where users can manage their email addresses and passkeys.
It should look like this 👇
Implement logout functionality
You can use @teamhanko/hanko-elements
to easily manage user logouts. Below, we make a logout button component that you can use anywhere.
Customize component styles
You can customize the appearance of hanko-auth
and hanko-profile
components using CSS variables and parts. Refer to our customization guide.
Getting User and Session Data
Client Side
We will create two custom hooks to fetch the current user’s data and session data using @teamhanko/hanko-elements
. The useUserData
hook leverages the hanko.user.getCurrent()
method to retrieve the currently logged-in user’s data.
On the other hand, the useSessionData
hook uses the hanko.session.isValid()
and hanko.session.get()
methods to validate and fetch the current session data.
This is how you can use them according to your needs.
You might get "r" is read-only
error after you deploy a CRA (Create React App). To fix it you’ll need to add @babel/core
as a dependency in your project. You can do this by running the following command:
Authenticate backend requests
To authenticate requests on your backend with Hanko, refer to our backend guide.
Try it yourself
React example (Vite)
It uses Express.js for the backend, full source code available on our GitHub.