Node.js 在我测试注销时,执行req.isAuthenticated()的结果始终为false。(节点js passport登录问题)
我正在使用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);
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的原因。