在Node.JS应用程序中,我使用通行证进行登录。
到目前为止,我从未实现过注销部分,并且正在尝试执行此操作,但是与此同时我遇到了一些问题。
首先,这是我的.js文件,专门用于用户
user.route.js
const passport = require('passport');
const multer = require("multer");
const User = require('../models/user.model');
const config = require('../config.js');
[...]
module.exports = function (app) {
var user = require('../controllers/user.controller');
var auth = require('../controllers/auth/auth.controller.js');
var validator = require('../validations/user.validation');
const hdlr_newsletter = require('../controllers/hdlr_newsletter');
const hdlr_server = require('../controllers/hdlr_server');
[...]
app.get('/api/logout', user.logout);
[...]
这是我为注销编写的代码
exports.logout = (req,res) => {
//req.logout();
req.session.destroy(function(err) {
res.redirect('/');
});
};
我也尝试过这种变体
exports.logout = (req,res) => {
req.logout();
req.session.destroy();
res.redirect("/");
};
但是它不起作用。每次我注销用户时,如果我尝试使用授予他的令牌发出新请求,该请求都会通过。 我想念什么? 对于任何需求,这都是我用于登录部分的代码
passport.authenticate('local', { session: true /*, failureCallback: failureCallback */}, (err, user, info) => {
if (!err) {
if (!user)
res.json(info);
else {
var userCopy = Object.assign({}, user._doc);
delete userCopy.password;
delete userCopy.salt;
delete userCopy.profilePicture;
var token = jwt.sign(userCopy, require('../../secret'), {expiresIn: 86400});
req.login(user, function(err) {
if (err) {
return res.status(401).json(err);
} else {
res.send({ success: true, status: 200, token: token });
}
});
}
}
})(req, res);
};