mirror of
https://github.com/jbranchaud/til
synced 2026-01-03 23:28:02 +00:00
Add Adjust The Shape Of The User Type as a NextAuth TIL
This commit is contained in:
40
next-auth/adjust-the-shape-of-the-user-type.md
Normal file
40
next-auth/adjust-the-shape-of-the-user-type.md
Normal file
@@ -0,0 +1,40 @@
|
||||
# Adjust The Shape Of The User Type
|
||||
|
||||
Let's say we want extra attributes on our `user` object that gets passed around
|
||||
as part of authentication with [NextAuth.js](https://next-auth.js.org/). 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.
|
||||
|
||||
```typescript
|
||||
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:
|
||||
|
||||
```json
|
||||
{
|
||||
...
|
||||
"include": [
|
||||
"src/**/*",
|
||||
"process.d.ts",
|
||||
"next-auth.d.ts"
|
||||
],
|
||||
...
|
||||
}
|
||||
```
|
||||
Reference in New Issue
Block a user