【问题标题】:nodejs auth cookies expire after server reload服务器重新加载后nodejs auth cookie过期
【发布时间】:2021-02-07 12:31:50
【问题描述】:

当我重新启动节点服务器时,再次登录验证请求登录。 我不明白该怎么做。 如果有人知道解决方案,请帮助我。 关于如何在 Node.js 中实现这一点的任何想法?我厌倦了每次重新启动服务器时都提供登录详细信息。所以我需要做这样的事情:

Routejs 和 Passportjs 如下。

route.js

const routes = express.Router();
const bodyparser = require('body-parser');
const bcrypt = require('bcryptjs');
const jwt = require('jsonwebtoken')
var nodemailer = require('nodemailer');

const passport = require('passport');
const session = require('express-session');
const cookieParser = require('cookie-parser');
const flash = require('connect-flash');
const myrouter = require('./HOME/ProductHome.js');
require('./passport')(passport);
require('dotenv').config()
const db = require('./mongoBase/db.js');


// using Bodyparser for getting form data
routes.use(bodyparser.urlencoded({ extended: true }));
// using cookie-parser and session 
routes.use(cookieParser('secret'));
routes.use(session({
    secret: 'secret',
    secure: true,
    maxAge: 3600000,
    resave: false,
    saveUninitialized: false,
}));


// using passport for authentications 
routes.use(passport.initialize());
routes.use(passport.session());
// using flash for flash messages 
routes.use(flash());

// MIDDLEWARES
// Global variable
myrouter.use(function(req, res, next) {
    res.locals.success_message = req.flash('success_message');
    res.locals.error_message = req.flash('error_message');
    res.locals.error = req.flash('error');
    next();
});

const checkAuthenticated = function(req, res, next) {
    if (req.isAuthenticated()) {
        res.set('Cache-Control', 'no-cache, private, no-store, must-revalidate, post-check=0, pre-check=0');
        return next();
    } else {
        res.redirect('/login');
    }
}


// ALL THE ROUTES 
routes.get('/register', (req, res) => {
    res.render('register.pug');
})



routes.post('/register', async(req, res) => {
    Usertype = 'user';
    var { email, username, password, confirmpassword, Address, State, City, pincode, phone, Gender } = req.body;
    if (req.body.type) {
        Usertype = req.body.type;
    } else {
        console.log("nothiongn is there")
    }
    var EMPID = Date.now();
    var TotalProducts = 0;
    var ShopEmployee = false;
    var err;
    email = email.toLowerCase();
    if (!email || !username || !password || !Gender || !confirmpassword || !Address || !State || !City || !pincode || !phone) {
        err = "Please Fill All The Fields...";
        res.render('register.pug', { 'err': err });
    }
    if (password != confirmpassword) {
        err = "Passwords Don't Match";
        res.render('register.pug', { 'err': err, 'email': email, 'username': username });
    }

    if (typeof err == 'undefined') {
        users = await db.getDB().collection("users").findOne({ email: email })
            .then(async(users) => {
                if (users) {
                    err = "User Already Exists With This Email...";
                    res.render('register.pug', { 'err': err, 'email': email, 'username': username });
                } else {
                    const token = jwt.sign({ username, email, password }, process.env.JWT_ACC_ACTIVATE, { expiresIn: '20m' });
                    console.log(token)
                    bcrypt.genSalt(10, (err, salt) => {
                        if (err) throw new Error("#");
                        bcrypt.hash(password, salt, async(err, hash) => {
                            if (err) throw new Error("#");
                            password = hash;
                            users_insert = await db.getDB().collection("users").insertOne({
                                email: email,
                                username: username,
                                password: password,
                                Address: Address,
                                State: State,
                                City: City,
                                Gender: Gender,
                                pincode: pincode,
                                phone: phone,
                                Usertype: Usertype,
                            }).then(() => {
                                req.flash('success_message', "Registered Successfully.. Login To Continue..");
                                res.redirect('/login');
                            }).catch(err => {
                                console.log(err)
                            })

                        });
                    });
                }
            })
    }
});

routes.get('/login', (req, res) => {
    username = "";
    res.render('login');
});


routes.post('/login', (req, res, next) => {
    passport.authenticate('local', {
        failureRedirect: '/login',
        successRedirect: '/',
        failureFlash: true,
    })(req, res, next);
});

routes.get('/logout', (req, res) => {
    req.logout();
    res.redirect('/login');
});



module.exports = routes;

Passport.js

const db = require('./mongoBase/db.js');

const bcrypt = require('bcryptjs');

module.exports = function(passport) {
        passport.use(new localStrategy({ usernameField: 'email' }, (email, password, done) => {
            email = email.toLowerCase();
            db.getDB().collection("users").findOne({ email: email }, (err, data) => {
                if (err) throw err;
                if (!data) {
                    return done(null, false, { message: "User Doesn't Exists.." });
                }
                bcrypt.compare(password, data.password, (err, match) => {
                    if (err) {
                        return done(null, false);
                    }
                    if (!match) {
                        return done(null, false, { message: "Password Doesn't Match" });
                    }
                    if (match) {
                        return done(null, data);
                    }
                });
            });
        }));

        passport.serializeUser(function(user, cb) {
            cb(null, user);
        });

        passport.deserializeUser(function(id, cb) {
            cb(null, id);
        });
    }

【问题讨论】:

    标签: javascript node.js express passport.js


    【解决方案1】:

    您可以使用 redis 来存储会话和管理它们,这是使用 Redis 进行身份验证和授权的一个很好的教程,请查看 article

    【讨论】:

      猜你喜欢
      • 2021-01-18
      • 2021-05-18
      • 2014-10-14
      • 1970-01-01
      • 2021-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多