req.isAuthenticated имеет значение false, а req.user не определен.Как я могу решить это? - PullRequest
0 голосов
/ 21 декабря 2018

Req.isAuthenticated () возвращает false после входа в систему, а также после регистрации нового пользователя.Что мне нужно сделать, чтобы это исправить?

У меня есть приложение с двумя разными именами входа.Один для «пользователей» и другой для «сотрудников».«Пользовательский» был первым, который я создал, и отлично работает как в процессе регистрации, так и в процессе входа в систему.Но «сотрудник» один не делает.Я сделал его код зеркальной версией «пользователя», поскольку «пользовательский» работает нормально, но этот не работает должным образом.

Я создал две разные стратегии для каждой (пользователь и сотрудник)) и две копии паспорта, но это не сработало.

Вот мой код:

passport, models and express-session vars config
var passportUser = require("passport");
var passportEmployee = require("passport");
var LocalStrategyUser = require("passport-local").Strategy;
var LocalStrategyEmployee = require("passport-local").Strategy;
var User = require("./models/user");
var Employee = require("./models/employee");
var session = require('express-session');

Конфигурация паспорта

//PASSPORT CONFIGURATION
app.use(session({
    secret: "Mar do macaco",
    resave: false,
    saveUninitialized:false,
    cookie : {
        secure:false,
        expires: false,
    }
 }));


app.use(cookieParser());

//USER
app.use(passportUser.initialize());
app.use(passportUser.session());

passportUser.use('user',new LocalStrategyUser(User.authenticate()));
passportUser.serializeUser(function(user, cb) {
  cb(null, user.id);
 });

passportUser.deserializeUser(function(id, cb) {
  User.findById(id, function (err, user) {
    if (err) { return cb(err); }
    cb(null, user);
  });
 });



//EMPLOYEE
app.use(passportEmployee.initialize());
app.use(passportEmployee.session());

passportEmployee.use('employee',new 
LocalStrategyEmployee(Employee.authenticate()));
Employee.serializeUser(function(user, cb) {
  cb(null, user.id);
});

passportEmployee.deserializeUser(function(id, cb) {
  User.findById(id, function (err, user) {
   if (err) { return cb(err); }
    cb(null, user);
  });
});

Сотрудник МАРШРУТЫ для регистрации ивход в систему (не работает нормально)

//REGISTER NEW EMPLOYEE
app.get("/registernew", function(req,res){
    res.render("employeeform")
})

//New Employee register logic
app.post("/registernew", async function(req,res){
    var newEmployee = new Employee({
        username:req.body.username,
        firstname:req.body.firstname,
        lastname:req.body.lastname,
        birth:req.body.birth,
        adress:req.body.adress,
        education:req.body.education,
        experience:req.body.experience,
        role:req.body.role
    });
    Employee.register(newEmployee, req.body.password,async function(err,employee){
        if(err){
            console.log(err);
            res.render("employeeform");
        } else{

            console.log("employee registered with success");
        }
        await passportEmployee.authenticate("employee")(req,res,function(){
            console.log("employee logged in");
            console.log(req.user.username);
            res.redirect("/");
        });
    })
})

//Employee Login

app.get("/employeelogin", function(req,res){
    res.render("employeelogin")
})

app.post("/employeelogin", passportEmployee.authenticate("employee",{successRedirect:"/",failureRedirect:"/employeelogin",failureFlash:true,successFlash: 'Welcome!'}),function(req,res){
    console.log(req.user)
})

ПОЛЬЗОВАТЕЛЬСКИЕ маршруты для регистрации и входа (РАБОТАЕТ СОВЕРШЕННО)

//show register form
app.get("/register", function(req,res){
    res.render("register");
});

//handle sign up logifc
app.post("/register", function(req,res){
    var newUser = new User({username:req.body.username});
    if(req.body.adminCode === 'secret') {
      newUser.isAdmin = true;
    }
    User.register(newUser, req.body.password, function(err,user){
        if(err){
            console.log(err);
            res.render("register");
        }
        passportUser.authenticate("user")(req,res, function(){
            res.redirect("/");
        });
    });
});



//SHOW LOGIN FORM
 app.get("/login", function(req,res){
     res.render("login");
 })

 //handling login logic
 app.post("/login", passportUser.authenticate("user",{successRedirect:"/",failureRedirect:"/login"}),function(req,res){
 })

С помощью этого я просто хочу решить эту проблему невозможности быть в состоянииаутентифицировался при использовании логина сотрудника.Это фактически делает вход в систему, но req.user не определен, а req.isauthenticated имеет значение false.

Спасибо за внимание

1 Ответ

0 голосов
/ 21 декабря 2018

Вы должны получить пользовательские данные из объекта req.body, прежде чем использовать их.Потому что его URL-кодированные данные.

...