javascript - nodejs mongoose - 如何在登录前检查数据库中的项目
问题描述
在我的项目中,我有不同的角色(卖家/用户/管理员),如果他们是卖家,我想检查角色并重定向到特定页面。
我很纠结如何在登录前检查 Mongo DB 中的角色。我的登录页面是基本的电子邮件密码和提交按钮。
对于我的注册来说一切都很好,它使用正确的模型并将其发布到数据库中。
这是我的一些代码:
(客户端模型)
userSchema.statics.login = async function (email, password, role) {
const user = await this.findOne({ email });
if (user) {
const auth = await bcrypt.compare(password, user.password);
if (auth) {
return user;
}
throw Error("incorrect password");
}
throw Error("incorrect email");
};
const ClientModel = mongoose.model("client", userSchema, "users");
登录控制器:
module.exports.clientSignIn = async (req, res) => {
const { email, password } = req.body;
try {
const user = await LoginModel.login(email, password);
const token = createToken(user._id);
res.cookie("jwt", token, { httpOnly: true, maxAge });
res.redirect('/success');
} catch (err) {
console.log(err.message);
}
};
提前感谢您的帮助,如果您需要更多信息,请随时询问
解决方案
遵循@EAzevedo 的建议。
我只是改变我的控制器
module.exports.clientSignIn = async (req, res) => {
const { email, password } = req.body;
try {
const user = await LoginModel.login(email, password);
const token = createToken(user._id);
res.cookie("jwt", token, { httpOnly: true, maxAge });
if (user.role == "client") {
res.redirect("/success");
} else if (user.role == "technicien") {
res.redirect("/success-technicien");
} else if (user.role == "superuser") {
res.redirect("/success-admin");
};
} catch (err) {
const errors = signInErrors(err);
res.status(200).json({ errors });
}
};
推荐阅读
- javascript - 如何在 list.item 中获取按钮 onclick 的值
- java - 何时在 Java 中使用 Comparable[ ]?
- javascript - 如何更改 Stats.js 的大小?
- qt - 移动窗口无法正常工作
- react-native - Metro Bundler 在 react-native 目录中寻找 JS 文件
- reactjs - 预期一个赋值或函数调用,而是在使用 div 时在反应中看到一个表达式
- wordpress - Woocommece 类别和商店页面问题
- ios - 加载和刷新时间敏感数据的最佳实践
- jsrender - 如何在启用 AllowCode 的情况下使用上下文参数
- visual-studio-code - 创建项目时在VS Code中设置包