简体   繁体   English

如何在节点 js 中将用户重定向到他们的特定页面

[英]How can i redirect user to their specific page In node js

Basically I want to redirect user to their pages.基本上我想将用户重定向到他们的页面。

If it's a user, it should redirect to user's menu on the other hand, if it's an employee, it should redirect to employee's menu.如果是用户,它应该重定向到用户的菜单,如果是员工,它应该重定向到员工的菜单。

When I try to login, it shows logged in is true but, it is still on login page and throws error as shown below -当我尝试登录时,它显示已登录,但它true登录页面上并引发错误,如下所示 -

 Customer and employee undefined Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client

Login.js登录.js

router.post("/login", function (req, res, next) {
  passport.authenticate("local", function (err, user, info) {
    if (err) {
      return next(err);
    }
    if (!user) {
      console.log("email password");
      return res.redirect("/login");
    }
    req.logIn(user, function (err) {
      if (err) {
        return next(err);
      }
      req.session.isLoggedIn = true;
      req.session.user = user;
      req.session.save((err) => {
        console.log(err);

        if (req.isAuthenticated()) {
          if (req.session.isLoggedIn === true) {
            let customer = User.find(user.email);
            let employee = Employee.find(user.email);
            if (employee) {
              res.render("employeeMenu");
            }
            if (customer) {
              res.render("clientMenu");
            }
          }
          return res.render("index");
        }
        console.log("user not exist");
        return res.redirect("/login");
      });
    });
  })(req, res, next);
});

function isLoggedIn(req, res, next) {
  if (req.isAuthenticated()) {
    req.isLogged = true;
    return next();
  } else {
    req.isLogged = false;
    return next();
  }
}

User Model用户 Model

const mongoose = require('mongoose')

 const Schema = mongoose.Schema

const userSchema = new Schema({

   firstName:{
      type:String,
      required:true
   },
   lastName:{
      type:String,
      required:true
   },  
   email:{
      type:String,
      required:true,
      unique:true
   },
   password:{
      type:String,
      required:true,
  }
})

Users = mongoose.model('User', userSchema)

module.exports = Users

Employee Model员工 Model

const mongoose = require('mongoose')

const Schema = mongoose.Schema

const employeeSchema = new Schema({
   First_name:{
       type: String,
       required:true
   },
   Last_name:{
       type:String,
       required:true
   },
   email:{
       type:String,
       required:true,
       unique:true,
  },
  contactNo:{
       type:Number,
       required:true,
       unique:true
 },
 password:{
       type:String,
       required:true,
 }, 
 joined:{
    type:Date,
    default:Date.now
 }
})

Employee = mongoose.model('Employee', employeeSchema)
module.exports = Employee

You want to write middleware, not a route handler.您想编写中间件,而不是路由处理程序。 So,所以,

 app.use(function(req, res, next) { if (req.session.user == null){ // if user is not logged-in redirect back to login page // res.redirect('/'); } else{ next(); } });

And also as the error suggest, you haven't created the customer and employee fields or columns in your database schema.而且正如错误提示的那样,您还没有在数据库模式中创建customer and employee字段或列 Hence, create it.因此,创建它。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM