--- id: securing-pages-and-api-routes title: Securing pages and API routes --- You can easily protect client and server side rendered pages and API routes with NextAuth.js. _You can find working examples of the approaches shown below in the [example project](https://github.com/nextauthjs/next-auth-example/)._ :::tip The methods `getSession()` and `getToken()` both return an `object` if a session is valid and `null` if a session is invalid or has expired. ::: ## Securing Pages ### Client Side If data on a page is fetched using calls to secure API routes - i.e. routes which use `getSession()` or `getToken()` to access the session - you can use the `useSession` React Hook to secure pages. ```js title="pages/client-side-example.js" import { useSession, getSession } from "next-auth/client" export default function Page() { const [session, loading] = useSession() if (loading) return null if (!loading && !session) return
Access Denied
return ( <>You can view this page because you are signed in.
> ) } ``` ### Server Side You can protect server side rendered pages using the `getSession()` method. ```js title="pages/server-side-example.js" import { useSession, getSession } from "next-auth/client" export default function Page() { const [session, loading] = useSession() if (typeof window !== "undefined" && loading) return null if (session) { return ( <>You can view this page because you are signed in.
> ) } returnAccess Denied
} export async function getServerSideProps(context) { const session = await getSession(context) return { props: { session }, } } ``` :::tip This example assumes you have configured `_app.js` to pass the `session` prop through so that it's immediately available on page load to `useSession`. ```js title="pages/_app.js" import { Provider } from "next-auth/client" export default ({ Component, pageProps }) => { return (