我正在尝试为会话中的用户设置角色
这是我从客户机上的session.user
得到的结果:
{ "email": "test value" }
我想要得到的东西
{
"email": "test value",
"role": "user"
}
由于某种原因,我可以在服务器端访问角色,但不能在客户端访问角色
[...下一次].ts:
//..
const authOptions: NextAuthOptions = {
session: {
strategy: "jwt",
},
providers: [
CredentialsProvider({
type: "credentials",
credentials: {},
async authorize(credentials, req) {
const { email, password } = credentials as {
email: string;
password: string;
};
const saltRounds = 10;
const db = path.join(process.cwd(), "db");
const users = JSON.parse(fs.readFileSync(db + "/users.json", "utf-8"));
type User = {
id: string;
email: string;
name: string;
role: "user" | "admin";
password: string;
};
for (let i = 0; i < users.length; i++) {
const e = users[i] as User;
const emailMatch = e.email === email;
if (emailMatch) {
const passwordMatch = bcrypt.compareSync(password, e.password);
if (passwordMatch) {
console.log("user loggedin", e);
return {
id: e.id,
email: e.email,
name: e.name,
role: e.role,
};
}
}
}
throw new Error("Invalid email or password");
},
}),
],
pages: {
signIn: "/auth/signin",
},
callbacks: {
jwt(params) {
if (params.user?.role) {
params.token.role = params.user.role;
}
console.log("jwt", params);
return params.token;
},
},
};
export default NextAuth(authOptions);
我试着搜索如何做到这一点,我没有看到我的代码有什么问题。
1条答案
按热度按时间1yjd4xko1#
这里您没有设置
session
,您必须使用会话回调从返回的token
更新session
:由于某种原因,我可以在服务器端访问角色,但不能在客户端访问角色
这是
token
中的角色,因为您已经向其添加了属性role
,现在您必须向session
添加属性