Let's say we want extra attributes on our user
object that gets passed around
as part of authentication with NextAuth.js. If
we're using a database adapter, it's because we have added columns to the
User
table. Or it may be that we are adding extra attributes to the body of
the JWT token.
Either way, we need the underlying User
type (rather, interface) to reflect
that.
Within a declare module
block for NextAuth, we can define a User
interface
with any additional properties that we want.
This adds roles
as a required string
type.
declare module "next-auth" {
interface User {
// ...other properties
roles: string;
}
}
Some natural places to add this declaration are in the auth file itself (e.g.
src/server/auth.ts
). Or we can put it in a dedicated top-level
next-auth.d.ts
file as long as we tell our tsconfig.json
to include it:
{
...
"include": [
"src/**/*",
"process.d.ts",
"next-auth.d.ts"
],
...
}