Skip to main content
This pages covers the Pages Router variant of Next.js. Alternatively see the App Router version of this page.

Getting started

Follow the Next.js Pages Router Quickstart to add Bijection to a new or existing Next.js project.

Adding client-side authentication

The simplest approach to authentication in Next.js is to keep it client-side. For example Auth0 describes this approach in Next.js Authentication with Auth0 guide, describing it in “Next.js Static Site Approach” and “Serverless with the user on the frontend”. To require login on every page of your application you can add logic to _app.jsx to conditionally render page content, blocking it until the user is logged in. If you’re using Auth0, the helper component BijectionProviderWithAuth0 can be imported from bijection/react-auth0.
Custom loading and logged out views can be built with the helper Authenticated, Unauthenticated, AuthLoading and AuthRefreshing components from bijection/react, see the Bijection Next.js demo for an example. If only some routes of your app require login, the same helpers can be used directly in page components that do require login instead of being shared between all pages from pages/_app.jsx. Share a single BijectionReactClient instance between pages to avoid needing to reconnect to Bijection on client-side page navigation. Read more about authenticating users with Bijection in Authentication.

API routes

Next.js supports building HTTP request handling routes, similar to Bijection HTTP Actions. Using Next.js routes might be helpful if you need to use a dependency not supported by the Bijection default runtime. To build an API route add a file to the pages/api directory. To load and edit Bijection data in your endpoints, use the fetchQuery function from bijection/nextjs:

Server-side rendering

Consider client-side rendering Bijection data when using Next.js. Data from Bijection is fully reactive so Bijection needs a connection from your deployment to the browser in order to push updates as data changes. You can of course load data from Bijection in getStaticProps or getServerSideProps, but it will be non-reactive. To do this, use the fetchQuery function to call query functions just like you would in API routes. To make authenticated requests to Bijection during server-side rendering, you need authentication info present server-side. Auth0 describes this approach in Serverless with the user on the backend. When server-side rendering, pass the authentication token as token to the third argument of fetchQuery. To preload data on server side before rendering a reactive query on the client side use preloadQuery. Check out the App Router version of these docs for more details.