Javascript 护照js+Express 4。结束登录会话时出现问题

Javascript 护照js+Express 4。结束登录会话时出现问题,javascript,node.js,authentication,express,passport.js,Javascript,Node.js,Authentication,Express,Passport.js,这是我的node js应用程序的代码: "use strict"; var express = require('express'); var app = express(); var port = process.env.PORT || 8080; var passport = require('passport'); var LocalStrategy = require('passport-local').Strategy; var morgan = require('morgan');

这是我的node js应用程序的代码:

"use strict";
var express = require('express');
var app = express();
var port = process.env.PORT || 8080;
var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;
var morgan = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var session = require('express-session');
var flash = require('connect-flash');
var favicon = require('serve-favicon');
app.use(morgan('dev'));
app.use(cookieParser());
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
    extended: true
}));
app.use(session({secret: 'kushagrasingh', resave: false, saveUninitialized: false }));
app.use(flash());
app.use(express.static(__dirname));
app.use(favicon(__dirname + '/favicon.ico'));
app.use(passport.initialize());
app.use(passport.session());

app.get('/welcome', function (req, res) {
    res.sendFile(__dirname + '/login.html');
});

app.get('/logout', function (req, res) {
    req.logOut();
    req.session.destroy(function (err) {
        if (err) {
            console.log(err);
        }
        res.redirect('/welcome');
    });
});

function isLoggedIn(req, res, next) {
    if (req.isAuthenticated()) {
        return next();
    }
    res.redirect('/welcome');
}

app.get('/', isLoggedIn, function (req, res) {
    res.sendFile(__dirname + '/index.html');
});

var users = [
    { id: '1', username: 'kush', password: 'abc'},
    { id: '2', username: 'kushagra', password: 'abcd'}
];

function findByUserName(username, fn) {
    var check = 0;
    users.every(function(user){
        console.log(user.username+'************'+username);
        if(user.username === username) {
            console.log('true');
            check = 1;
            return fn(null, user);
            //return false;
        }
    });
    if (check === 0) {
        return fn('Wrong username', null);
    }
    //return fn(null, null);
}

function findById(id, fn) {
    var check = 0;
    users.every(function(user) {
        if(user.id === id) {
            check = 1;
            return fn(null, user);
        }
    });
    if(check === 0) {
        console.log('false');
        return fn(new Error("No user with id: "+id));
    }
}



passport.serializeUser(function(user, done) {
    console.log('serialize');
    done(null, user.id);
});

passport.deserializeUser(function(id, done) {
    console.log('deserialize');
    findById(id, function (err, user) {
        done(err, user);
    });
});

passport.use('local', new LocalStrategy(
    function(username, password, done) {
        process.nextTick(function () {
            console.log('check');
            findByUserName(username, function(err, user) {
                if (err) {  console.log(err); return done(err); }
                else if (!user) { return done(null, false, { message: 'Unknown user ' + username }); }
                else if (user.password !== password) { return done(null, false, { message: 'Invalid password' }); }
                else {
                    console.log("USER RETURNED");
                    return done(null, user);
                }
            });
        });
    }
));


app.post('/login',
    passport.authenticate('local', { successRedirect: '/', failureRedirect: '/loginFailure', failureFlash: true }));

app.listen(port);
console.log("server started at " + port);
EnsureReauthenticated函数未执行其任务,即限制 如果用户已注销,则访问。因此,即使在注销之后,“/”get请求也将完成。 我会非常感谢你的帮助。 提前感谢:

重新定位app.useexpress.static\u dirname;line完成了任务。 将其放置在路线之后,解决了所有问题