Node.js 在我测试注销时,执行req.isAuthenticated()的结果始终为false。(节点js passport登录问题)

Node.js 在我测试注销时,执行req.isAuthenticated()的结果始终为false。(节点js passport登录问题),node.js,passport.js,Node.js,Passport.js,我正在使用passport实现登录。我有一个关于一个棘手的登录问题的问题 这是什么 router.post('/login', isNotLoggedIn ,(req, res, next) => { passport.authenticate('local', (err, user, info) => { if (err) { console.error(err); return next(err);

我正在使用passport实现登录。我有一个关于一个棘手的登录问题的问题

这是什么

router.post('/login', isNotLoggedIn ,(req, res, next) => {
    passport.authenticate('local', (err, user, info) => {
        if (err) {
            console.error(err);
            return next(err);
        }
        if (info) {
            return res.status(401).send(info.reason);
        }
        return req.login(user, async (loginErr) => {
            if (loginErr) {
                console.error(loginErr);
                return next(loginErr);
            }
            // console.log("user : ", user);

            console.log("login check : ", req.isAuthenticated());

            const fullUserWithoutPassword = await User.findOne({
                where: { id: user.id },
                attributes: {
                    exclude: ['password']
                },
                include: [{
                    model: Post,
                    attributes: ['id'],
                }, {
                    model: User,
                    as: 'Followings',
                    attributes: ['id'],
                }, {
                    model: User,
                    as: 'Followers',
                    attributes: ['id'],
                }]
            })
            // console.log("fullUserWithoutPassword : ", fullUserWithoutPassword);
            return res.status(200).json(fullUserWithoutPassword);
        });
    })(req, res, next);
});
下面代码的结果是正确的

            console.log("login check : ", req.isAuthenticated());
每当我尝试注销时,如果我检查我当前是否登录并且设置了req.user,结果如下

req.isAuthenticated() => false. 
console.log("logout check :::::::::::::", req.user); => undefined
注销路由器

router.post('/logout',  (req, res, next) => {
    console.log("login check :::::::::::::", req.isAuthenticated());
    console.log("logout check :::::::::::::", req.user);

    req.logout();
    req.session.destroy();
    res.send('ok')
})
我正在寻找这个问题的原因。 可能back/app.js的顺序不对? 或者pass端口代码是错误的? 还是别的什么

谢谢你的评论

返回\app.js

const express = require('express');
const postRouter = require('./routes/post');
const userRouter = require('./routes/user');
const cors = require('cors');
const session = require('express-session');
const cookieParser = require('cookie-parser');
const passport = require('passport');
const passportConfig = require('./passport');


const dotenv = require('dotenv');
dotenv.config();

const app = express();
const db = require('./models');

db.sequelize.sync()
    .then(() => {
        console.log("db connection success !!");
    })
    .catch("error : ", console.error)
passportConfig();


app.use(cors({
    origin: '*',
    credentials: true,
}));

    
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
app.use(cookieParser(process.env.COOKIE_SECRET));

app.use(session({
    resave: true,
    saveUninitialized: false,
    cookie: { maxAge: 24 * 60 * 60 * 1000 },
    secret: process.env.COOKIE_SECRET,
}));
app.use(passport.initialize());
app.use(passport.session());


app.get('/', (req, res) => {
    res.send("hello express");
});

app.use('/post', postRouter);
app.use('/user', userRouter);

app.listen(3065, () => {
    console.log("Ecpress Server is Excuting");
});
passport/index.js

const { User } = require('../models');
const passport = require('passport');
const local = require('./local');


module.exports = () => {
    passport.serializeUser((user, done) => {
        done(null, user.id);  
    });
    passport.deserializeUser(async (id, done) => {
        try {
            const user = await User.findOne({ where: { id }});            console.log("user : ", user);
            done(null, user);
        } catch (error) {
            done(error);
        }
    });
    local();
}
passport/local.js

const passport = require('passport');
const { Strategy: LocalStrategy } = require('passport-local');
const { User } = require('../models');
const bcrypt = require('bcrypt');

module.exports = () => {
    passport.use(new LocalStrategy({
        usernameField: 'email',
        passwordField: 'password'
    }, async (email, password, done) => {
        try {
            const user = await User.findOne({
                where: { email }
            });
            if (!user) {
                console.log("email is not exists");
                return done(null, false, { reason: 'email is not exists' });
            }
            const result = await bcrypt.compare(password, user.password);
            if (result) {
                console.log("result :::::::::::::" , result);
                return done(null, user);
            }
            return done(null, false, { reason: 'pass word is wrong' });
        } catch (error) {
            console.log(error);
            console.error(error);
            return done(error);
        }
    }));
}

再见,试着修改
/logout
这样的帖子:

router.post('/logout',  (req, res, next) => {
   console.log("login check :::::::::::::", req.isUnauthenticated());

   req.logout();
   req.session.destroy();
   res.send('ok')
})

req.isUnauthenticated()等于true,这意味着注销后请求始终未经身份验证。

github是这样的:Ciao,如果在相同的位置登录req.isAuthenticated,则尝试登录
req.session.passport.user!==未定义
您收到了什么?console.log(“giovanni check”,req.session.passport.user);=>?好的,最后一次检查:console.log(req.isUnauthenticated());==>?没问题。我写我的答案是为了完成你的问题。如果你愿意,把它标为正确答案。再见,祝你有一个愉快的一天:)我这样执行,结果是真实的,这意味着在你注销时,请求总是未经验证的。这就是req.isAuthenticated返回false的原因。