简体   繁体   中英

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 -

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

Login.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

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

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. Hence, create it.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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