Reputation: 643
I'm currently implementing user authentication on my website, and I'm trying to restrict access to the login and signup pages if the user is logged in. To do so, I am implementing this getServerSideProps
to redirect the user if they're logged in:
export async function getServerSideProps(context) {
if (context.req.cookies.user) {
return {
redirect: {
destination: '/',
permanent: true,
},
}
}
return {}
}
If I return an empty object ({}
), next gives me this error:
Reason: Props must be returned as a plain object from getServerSideProps: `{ props: { ... } }` (received: `[object Array]`).
If instead of returning {}
, I return
{
props: {}
}
the code works all right. Does anyone know why this is happening?
I'm using a custom _app.jsx
file.
In the documentation, it's clearly mentioned that the props argument is optional:
Upvotes: 4
Views: 688
Reputation: 13004
This is actually intended. If you were using TypeScript, return {}
would have thrown you error as GetServerSidePropsResult
is defined like this here:
export type GetServerSidePropsResult<P> =
| { props: P | Promise<P> }
| { redirect: Redirect }
| { notFound: true }
It means that any one of props
, redirect
, notFound
needs to be present in the returned object. Perhaps you can create an issue at their GitHub (and maybe a PR) to fix the documentation.
Upvotes: 3
Reputation: 643
As mentioned by @tromgy, it was just the documentation that is unclear.
Upvotes: 0