node.js - 如何让多个用户使用单一路由登录
问题描述
我有一个登录代码。我有 2 个模式,一个是用户和管理员。现在我有两个普通用户和超级管理员的登录路由 url,/login
管理员用户和超级管理员也是如此。adminLogin
我只想将这两个模式与单个路由结合起来/login
。
这是我的/login
路线代码,与代码中的/adminLogin
唯一区别是用户和管理员(架构)相同
router.post('/login' , (req, res, next) => {
User.find({email: req.body.email})
.exec()
.then(user => {
if(user.length < 1) {
return res.status(401).json({
message: "Auth failed. User not found."
})
}
bcrypt.compare(req.body.password, user[0].password, (err, result) =>{
if (err) {
return res.json({
message: "Auth failed. Check email and password"
});
}
if (result && user[0].isVerified === true){
const adminEmail = "xyz@temp-mail.com";
const role = user[0].email===adminEmail? "superadmin" : "user"; //---- Here in case of Admin schema -> "superadmin" : "admin";
const token = jwt.sign(
{
email: user[0].email,
userId: user[0]._id,
phoneNo: user[0].phoneNumber,
role
},
process.env.JWT_KEY,
{
expiresIn : "1h"
});
return res.status(200).json({
message: "Auth Successful",
token : token
});
}
else{
console.log("user is not verified");
return res.json({
message: "User is not verified"
});
}
如何在同一登录功能中将 Admin.find()用于 Admin 架构?
解决方案
在不更改架构的情况下,首先像这样重构代码:
function handle(find_func, base_role, req, res, next) {
find_func( // your original code inside User.find, change "superadmin" : "user" to "superadmin" : base_role
...);
}
对于普通用户登录,请致电
handle(User.find, "user", req, res, next);
对于管理员用户登录,调用
handle(Admin.find, "admin", req, res, next);
现在您需要区分登录是来自普通用户还是管理员用户。无需将您的管理员和用户架构合并到一个更大的架构中,其中一个新字段“角色”指示它是普通用户还是管理员用户,您可以查询用户名是否在用户集合中,如果不查询它是否在管理员集合中,然后调用对应handle
。
推荐阅读
- python-3.x - python - 在遍历python中的xml树时如何更改xml路径?
- tensorflow - 时间序列数据的特征提取
- c++ - 如何从 CMakeLists.txt 为 mingw32-make 添加命令行选项?
- c++ - 我在 C++ 中用 0 初始化了一个二维数组,但它正在用一些任意数字初始化某个元素,为什么会这样?
- mongodb - mongorestore 0 个文档已成功恢复。0 个文档无法恢复
- python - 使用 for 循环对每个键取多个值
- html - xslt 2.0 html 将值插入布局
- ios - 如何创建自定义 UTType 并启用 UIDocumentPickerViewController?
- android - Android NDK:在 android_main 函数中处理和创建输入事件
- nodemailer - 如何使用 nodemailer 发送 html 模板?