Closed thomasmol closed 9 months ago
This seems to be related to https://github.com/Microsoft/TypeScript/issues/14094.
Minimum code:
type Obj1 = { a: string, b: string }
type Obj2 = { a: string, c: string }
const func = (args: Obj1 | Obj2) => {
args.b = ""
^
Property 'b' does not exist on type 'Obj1 | Obj2'.
Property 'b' does not exist on type 'Obj2'.
}
Using { session, user?, token? }
instead of { session, user } | { session, token }
seems to fix this.
Can confirm this on the latest next-auth: 5.0.0-beta.5
Can confirm this on the latest
next-auth: 5.0.0-beta.5
It's also happening to me...
Can confirm this on the latest
next-auth: 5.0.0-beta.5
i am also facing the same problem . did yu find any solution
i think #9646 is the solution to this as proposed by @nbifrye. It is more due to a limitation in typescript rather than authjs
I have same problem
FYI for a quick fix, just manually set the types while setting user as optional, e.g.
import NextAuth, { type Session, type User } from "next-auth";
export const auth = NextAuth({
callbacks: {
async session({ session, user }: { session: Session; user?: User }) {
if (user) {
// do whatever here
}
return session;
},
},
});
FYI for a quick fix, just manually set the types while setting user as optional, e.g.
import NextAuth, { type Session, type User } from "next-auth"; export const auth = NextAuth({ callbacks: { async session({ session, user }: { session: Session; user?: User }) { if (user) { // do whatever here } return session; }, }, });
Taking in consideration what jeremy-code posted, this is how I did it:
import NextAuth, { Session, User } from "next-auth";
async session(
params:
| { session: Session; user: User }
| { session: Session; token: JWT },
) {
if (!("token" in params)) return params.session;
const sessao = {
...params.session,
token: params.token,
};
return sessao;
},
}
Same here, when trying to access the token in the session callback using the jwt strategy, it wont let me access the second part of the params which included the token. Only present in authjs 5 beta 5, not in authjs 5 beta 4.
Same here, when trying to access the token in the session callback using the jwt strategy, it wont let me access the second part of the params which included the token. Only present in authjs 5 beta 5, not in authjs 5 beta 4.
async session({ session, token}: {session: Session, token?: any}) {
this is what worked for me you can also try as far i understood this is a typescript error .
I am also having the same error
On my case I fix the first error (Property token does not exist on type session Session user) but now the token is not being recognized.
My experience is that it works on 5.0.0-beta.4 but not on 5.0.0-beta.5
I was able to pass the error putting '?' on the token. I'm in Next Auth Beta 5.
Downgrading to beta.4 was the easiest and least hacky fix that worked for me. Make sure to delete the ^ symbol.
Before:
After:
In my case I solved it as follows :
This way, there is no longer an error in the token parameter of the session object and I can even add more fields if I want within the token in addition to those that already come by default. https://authjs.dev/getting-started/typescript
Environment
npmPackages: @auth/core: ^0. => 0.20.0 @auth/drizzle-adapter: ^0. => 0.3.14 @auth/sveltekit: ^0.* => 0.5.2 Node: 20.3.1 - /opt/homebrew/bin/node
Reproduction URL
https://github.com/thomasmol/authjsbugs
Describe the issue
related to #9437
i get a type error in the session callback for the
user
ortoken
property:error claims
user
does not exist, while it does, although it depends on the database strategy used.error located here on the
user
property inhooks.server.ts
:not sure if useful but this is copilot explaining: "The error message you're seeing is due to TypeScript not being able to determine the exact type of the object that's being passed to the session callback. The type of the object is a union type, which means it could be one of several types. In this case, it could be { session: Session; user: AdapterUser; } or { session: Session; token: JWT; }.
The user property exists on the first type, but not on the second. When you try to access user.id, TypeScript can't guarantee that user will always be present, hence the error."
How to reproduce
install auth core + auth sveltekit, create hooks.server.ts and add a the session callback. type error occurs on user and token, but not the session property.
Expected behavior
no type errors