如何修复Passport.js代码,使其可以正确注销和登录用户?

时间:2019-07-02 09:13:00

标签: node.js express cookies mongoose passport.js

我无法让用户登录到我的网站。我为此网站使用Passport.js,passport-local-mongoose和express-session,经过一番测试后发现我的用户尚未登录。我需要登录的用户因为网站依赖Cookie

在我的“ / logout” GET请求中,我放置了一个函数来查看用户是否已登录。每当我登录并尝试运行代码时,我都会看到一个cookie,但是直到最终超时我才被重定向。如果我已经登录,那么我将被重定向。我需要确保用户先登录,然后才能注销他们。

var path = require("path");
var express = require("express");
var mongoose = require("mongoose");
var bodyParser = require("body-parser");
var app = express();

mongoose.connect("mongodb://localhost/VerfundenV1", {useNewUrlParser: true, useFindAndModify: false});
app.set("view engine", "ejs");
app.use(bodyParser.urlencoded({extended: true}));

var modelsPath = path.join(__dirname, "../utils/mongoose/");
var functionPath = path.join(__dirname, "../utils/customFunctions/");
var User = require(modelsPath + "UserModel.js");

var passport = require("passport");
var LocalStrategy = require("passport-local");
app.use(require("express-session")({
    secret: "nothingtoseehere",
    resave: false,
    saveUninitialized: false
}));
app.use(passport.initialize());
app.use(passport.session());

passport.use(new LocalStrategy({usernameField: 'email'}, User.authenticate()));
passport.serializeUser(User.serializeUser());
passport.deserializeUser(User.deserializeUser());

app.get("/", function(req, res){
    res.send("HEY");
})

app.get("/dashboard", function(req, res){
    res.send("DASHBOARD");
})


//user auth and all that stuff
app.get("/register", function(req, res){
    res.render("register")
})

app.post("/register", function(req, res){
    User.register(new User({
        firstName: req.body.firstName,
        lastName: req.body.lastName,
        region: req.body.region,
        email: req.body.email,
        phone: req.body.phone
    }), req.body.password, function(err, user){
        if(err){
            console.log(err);
            res.render("register");
        }else{
        passport.authenticate("local")(req, res, function(){
            res.redirect("/")
        })
    }
    })
});

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

app.post("/login", passport.authenticate("local", 
    {
        successRedirect: "/",
        failureRedirect: "/login"
    }), function(req, res){
})

app.get("/logout", function(req, res){
    if (req.isAuthenticated()) {
        return res.redirect('/') // Handle valid logout
    }
})

app.listen(3000, function(){
    console.log("SERVER SIX, GOING DARK")
})

任何帮助将不胜感激。

0 个答案:

没有答案
相关问题