n9p*_*9p4 10 session next.js prisma next-auth
我想更新用户的数据,但更新用户的数据后如何使更改也出现在会话中?
[...nextauth].js
callbacks: {
jwt: ({ token, user }) => {
if (user) {
token.id = user.id;
token.name = user.name;
token.surname = user.surname;
token.email = user.email;
token.role = user.role;
}
// Here, check the token validity date
if (token.tokenExpiration < Date.now()) {
// Call the endpoint where you handle the token refresh for a user
const user = axios.post(
`${process.env.API_URL}/auth/authentication/refresh`,
{
refreshToken: token.refreshToken,
}
);
// Check for the result and update the data accordingly
return { ...token, ...user };
}
return token;
},
session: ({ session, token }) => {
if (token) {
session.id = token.id;
session.name = token.name;
session.surname = token.surname;
session.email = token.email;
session.role = token.role;
}
return session;
},
},
secret: process.env.SECRET_KEY,
jwt: {
secret: process.env.SECRET_KEY,
encryption: true,
maxAge: 5 * 60 * 1000,
},
Run Code Online (Sandbox Code Playgroud)
api/user/index.js 这里我更新了用户内容,我应该怎么做才能更新会话对象详细信息
const updateUser = await prisma.user.update({
where: {
email: 'test@email.io',
},
data: {
name: 'User',
},
})
Run Code Online (Sandbox Code Playgroud)
会话对象
name : Company
email : test@email.io
expires : 2022-04-26T18:44:36.424Z
id : 2
name : Company
surname : Surname
email : test@email.io
role : 2
Run Code Online (Sandbox Code Playgroud)
小智 1
我有同样的问题并且有一个 hacky 解决方法。在session回调中,从数据库中获取用户。每当检查会话(文档)时都会触发此回调,因此您可以在更新用户后调用,,甚至其他getSession()地方useSession()。signIn()
async function getUserFromDB(accessToken) {
// I'm not super familiar with prisma but you get the idea
const user = await prisma.user.findUnique({
// logic to get user
// maybe it needs your accessToken
});
return user;
}
Run Code Online (Sandbox Code Playgroud)
// [...nextAuth].js
session: ({ session, token }) => {
if (token) {
session = await getUserFromDB(token.accessToken);
}
return session;
}
Run Code Online (Sandbox Code Playgroud)
明显的缺点:每当检查会话时都会调用从数据库获取用户。
| 归档时间: |
|
| 查看次数: |
3296 次 |
| 最近记录: |