【发布时间】:2022-12-10 02:07:52
【问题描述】:
我正在尝试构建一个实现 NextAuth 的 NextJS 应用程序。配置回调时,我在 [...nextauth].ts 中遇到以下错误:
Type error: Property 'role' does not exist on type 'User | AdapterUser'.
Property 'role' does not exist on type 'User'.
56 | jwt: async ({ token, user }) => {
57 | // First time JWT callback is run, user object is available
> 58 | if (user && user.id && user.role) {
| ^
59 | token.id = user.id;
60 | token.role = user.role;
61 | }
代码的完整回调部分如下所示:
callbacks: {
jwt: async ({ token, user }) => {
// First time JWT callback is run, user object is available
if (user && user.id && user.role) {
token.id = user.id;
token.role = user.role;
}
return token;
},
session: async ({ session, token }) => {
if (token && token.id && token.role) {
session.id = token.id;
session.role = token.role;
}
return session;
},
},
我正在使用带有电子邮件和密码的 CredentialProvider。这是authorize:
async authorize(credentials) {
if (!credentials || !credentials.email) return null;
const dbCredentials = await executeAccountQuery(
`SELECT password FROM auth WHERE email=?`,
[credentials.email]
);
if (Array.isArray(dbCredentials) && "password" in dbCredentials[0]) {
const isValid = await compare(
credentials.password,
dbCredentials[0].password
);
if (isValid) {
return {
id: "5",
role: 99,
name: "John Smith",
email: credentials.email,
};
}
return null;
}
return null; // login failed
},
由于 authorize 函数的工作方式,我知道 User 对象将附加一个 role (因为我已经测试过),但我想不出一种方法来处理这个错误并摆脱它。
类似地,session 回调也出现错误,其中 session.id 和 session.role 也不存在于 Session 上。
【问题讨论】:
标签: node.js typescript next.js next-auth