首页 > 解决方案 > 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);
  }
};

提前感谢您的帮助,如果您需要更多信息,请随时询问

标签: javascriptnode.jsmongoose

解决方案


遵循@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 });
  }
};

推荐阅读