我现在正在学习theodinproject的教程,并且在用户身份验证方面遇到了问题。在教程中,他们使用Mongodb
和Mongoose
来与Passport.js
集成,但在我的例子中,我使用Postgres
和Prisma
与Passport.js
集成,所以代码会有所不同。我从Passport.js
中检查了theodinproject和doc,一个使用Mongoose
,另一个使用原始SQL代码。所以我不知道如何使用Prisma
。我试图做一些研究,看看是否有人曾经这样做过,但我没有看到多少结果。
我试着键入一些东西与它一起玩,并给出了下面的代码
passport.use(async (username, password, done) => {
const user = await prisma.user.findFirst(
{ where: { username } },
(err, user) => {
if (err) {
return done(err);
}
if (!user) {
return done(null, false, { message: "Incorrect username" });
}
if (user.password !== password) {
return done(null, false, { message: "Incorrect password" });
}
return done(null, user);
}
);
});
显然,这是错误的(因为应用程序崩溃),但我不知道如何解决这个问题。有人能帮我吗?
(预先谢谢:)
编辑:我在deserializeUser
中遇到了另一个问题,根据theodinproject,这是他们的代码:
passport.deserializeUser(function(id, done) {
User.findById(id, function(err, user) {
done(err, user);
});
});
我怎么才能用Prisma的方式做这件事?我试着自己编码,但我被困在这里:
passport.deserializeUser(async (id, done) => {
const user = await prisma.user.findFirst({ where: { id } });
});
对于serializeUser
,我不确定我做得对不对
passport.serializeUser((user, done) => {
done(null, user.id);
});
发布于 2022-11-23 16:05:42
你想做这样的事吗?
passport.use(async (username, password, done) => {
const user = await prisma.user.findFirst(
{ where: { username } },
);
if (!user) {
return done(null, false, { message: "Incorrect username" });
}
if (user.password !== password) {
return done(null, false, { message: "Incorrect password" });
}
return done(null, user);
});
findFirst
只接受一个参数
如果你真的想捕捉一个可能的错误,除非你的数据库关闭,否则不应该发生的事情,你可以做。
passport.use(async (username, password, done) => {
try {
const user = await prisma.user.findFirst(
{ where: { username } },
);
if (!user) {
return done(null, false, { message: "Incorrect username" });
}
if (user.password !== password) {
return done(null, false, { message: "Incorrect password" });
}
return done(null, user);
} catch (error) {
return done(err);
}
});
编辑
您的serializeUser
函数看起来不错,对于deserializeUser
,我们需要做与use
函数相同的操作
passport.deserializeUser(async (id, done) => {
try {
// You did well where
const user = await prisma.user.findFirst({ where: { id } });
done(null, user)
} catch (error) {
done(error)
}
});
https://stackoverflow.com/questions/74549251
复制相似问题