Next.js 中的会话未返回正确的值
Session in Next.js not returning the correct values
登录后,返回的一些数据不会显示在会话中,只有 returns 电子邮件、姓名。
然而,ID 位于用户对象之下。另外,我有 console.log(user.data),returns 用户完美地拥有所有这些属性。
[...nextauth].js
async authorize(credentials) {
const user = await axios.post("http://localhost:4000/api/auth/login", {
email: credentials.username,
password: credentials.password,
});
console.log(user.data);
//{
// user: {
// id: 1,
// name: 'admin',
// surname: 'surname admin',
// email: 'admin@email.com',
// avatar: null,
// role: '1',
// dob: '2020-01-01T00:00:00.000Z',
// description: null,
// cv: null,
// createdAt: '2022-01-07T00:03:09.000Z',
// updatedAt: '2022-01-07T00:03:09.000Z'
// }
//}
//
if (user.data.message === "User not found") {
return null;
}
if (user.data.user) {
return {
id: user.data.user.id, //suppose to be 1
name: user.data.user.name, //suppose to be admin
surname: user.data.user.surname, //suppose to be surname
email: user.data.user.email, //suppose to be admin@email.com
};
}
},
index.js
const { data: session } = useSession();
console.log(session);
// OUTPUT:
// expires: "2022-02-18T08:55:39.898Z"
// id: 1
// user: {name: 'admin', email: 'admin@email.com'}
尝试在 NextAuth 选项中添加类似这样的内容
callbacks: {
async session({ session, token }) {
session.user = token.user;
return session;
},
async jwt({ token, user }) {
if (user) {
token.user = user;
}
return token;
},
},
基本上,您需要在回调中传递所有值,它才会起作用。
将所有令牌值传递给会话对象
callbacks: {
jwt: ({ token, user }) => {
if (user) {
token.id = user.id;
token.name = user.name;
token.surname = user.surname;
token.email = user.email;
}
return token;
},
session: ({ session, token }) => {
if (token) {
session.id = token.id;
session.name = token.name;
session.surname = token.surname;
session.email = token.email;
}
return session;
},
},
登录后,返回的一些数据不会显示在会话中,只有 returns 电子邮件、姓名。 然而,ID 位于用户对象之下。另外,我有 console.log(user.data),returns 用户完美地拥有所有这些属性。
[...nextauth].js
async authorize(credentials) {
const user = await axios.post("http://localhost:4000/api/auth/login", {
email: credentials.username,
password: credentials.password,
});
console.log(user.data);
//{
// user: {
// id: 1,
// name: 'admin',
// surname: 'surname admin',
// email: 'admin@email.com',
// avatar: null,
// role: '1',
// dob: '2020-01-01T00:00:00.000Z',
// description: null,
// cv: null,
// createdAt: '2022-01-07T00:03:09.000Z',
// updatedAt: '2022-01-07T00:03:09.000Z'
// }
//}
//
if (user.data.message === "User not found") {
return null;
}
if (user.data.user) {
return {
id: user.data.user.id, //suppose to be 1
name: user.data.user.name, //suppose to be admin
surname: user.data.user.surname, //suppose to be surname
email: user.data.user.email, //suppose to be admin@email.com
};
}
},
index.js
const { data: session } = useSession();
console.log(session);
// OUTPUT:
// expires: "2022-02-18T08:55:39.898Z"
// id: 1
// user: {name: 'admin', email: 'admin@email.com'}
尝试在 NextAuth 选项中添加类似这样的内容
callbacks: {
async session({ session, token }) {
session.user = token.user;
return session;
},
async jwt({ token, user }) {
if (user) {
token.user = user;
}
return token;
},
},
基本上,您需要在回调中传递所有值,它才会起作用。 将所有令牌值传递给会话对象
callbacks: {
jwt: ({ token, user }) => {
if (user) {
token.id = user.id;
token.name = user.name;
token.surname = user.surname;
token.email = user.email;
}
return token;
},
session: ({ session, token }) => {
if (token) {
session.id = token.id;
session.name = token.name;
session.surname = token.surname;
session.email = token.email;
}
return session;
},
},