请求会话未找到并继续重置

6tqwzwtp  于 2022-09-18  发布在  Java
关注(0)|答案(2)|浏览(153)

我试图跟踪用户是否登录,如果没有,并尝试创建一个新的帖子,他将重定向到登录页面,然后我存储了他试图去的URL(新的帖子URL),所以当他登录时,他会被重定向到那里,我使用Express会话来存储它,并让Passport本地做认证的事情,无论如何(新的帖子)URL在会话中,但当我登录(做帖子请求)时,它只是被删除了,尽管我尝试了其他帖子请求,看看是否这个问题,但它只在这个帖子上重置

检查并存储会话中url的中间件

module.exports.isLoggedIn = (req, res, next) => {
    if (!req.isAuthenticated()) {
        req.session.returnTo = req.originalUrl
        console.log(req.session.returnTo)
        req.flash('error', 'You must be signed in first!');
        return res.redirect('/login');
    }
    next();
}

module.exports.isNotLoggedIn = (req, res, next) => {
    if (req.isAuthenticated()) {
        return res.redirect('/campgrounds')
    }
    next();
}

登录路径

const express = require('express');
const router = express.Router();
const passport = require('passport');
const catchAsync = require('../utils/catchAsync');
const User = require('../models/user');
const { isNotLoggedIn } = require('../middleware')

router.get('/register', isNotLoggedIn, (req, res) => {
    res.render('users/register');
});

router.post('/register', isNotLoggedIn, catchAsync(async (req, res, next) => {
    try {
        const { email, username, password } = req.body;
        const user = new User({ email, username });
        const registeredUser = await User.register(user, password);
        req.login(registeredUser, err => {
            if (err) return next(err);
            req.flash('success', 'Welcome to Yelp Camp!');
            res.redirect('/campgrounds');
        })
    } catch (e) {
        req.flash('error', e.message);
        res.redirect('register');
    }
}));

router.get('/login', isNotLoggedIn, (req, res) => {
    console.log(req.session)
    res.render('users/login');
})

router.post('/login', isNotLoggedIn, passport.authenticate('local', { failureFlash: true, failureRedirect: '/login' }), (req, res) => {
    req.flash('success', 'welcome back!');
    const returnTo = req.session.returnTo || '/campgrounds';
    console.log('this thsisdifsdk')
    console.log(req.session) //todo this req.session is getting reset for some reason and i cannot return to what page i was goin for
    res.redirect(returnTo);
})

router.get('/logout', (req, res) => {
    req.logout((err) => {
        if (err) { return next(err); }
        req.flash('success', "Goodbye!");
        res.redirect('/campgrounds');
    });

})

module.exports = router;

app.js

const express = require('express')
const path = require('path')
const mongoose = require('mongoose')
const ejsMate = require('ejs-mate');
const session = require('express-session')
const flash = require('connect-flash')
const ExpressError = require('./utils/ExpressError')
const methodOverride = require('method-override')
const passport = require('passport');
const LocalStrategy = require('passport-local')
const User = require('./models/user')

const userRoutes = require('./routes/user')
const campgroundRoutes = require('./routes/campgrounds')
const reviewRoutes = require('./routes/reviews');

mongoose.connect('mongodb://localhost:27017/yelp-camp');

const db = mongoose.connection //?shortcut
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', () => {
    console.log('Database Connected');
})

const app = express();

app.engine('ejs', ejsMate)
app.set('view engine', 'ejs');
app.set('views', path.join(__dirname, 'views'))

app.use(express.urlencoded({ extended: true }));
app.use(methodOverride('_method'));
app.use(express.static(path.join(__dirname, 'public')))

const sessionConfig = {
    secret: 'meowmeowthecatsounduwu',
    resave: false,
    saveUninitialized: true,
    cookie: {
        httpOnly: true,
        expires: Date.now() + 1000 * 60 * 60 * 24 * 7,
        maxAge: 1000 * 60 * 60 * 24 * 7
    }
}

app.use(session(sessionConfig))
app.use(flash());

app.use(passport.initialize());
app.use(passport.session());
passport.use(new LocalStrategy(User.authenticate()));

passport.serializeUser(User.serializeUser());
passport.deserializeUser(User.deserializeUser());

app.use((req, res, next) => {
    console.log(req.session)
    res.locals.currentUser = req.user;
    res.locals.success = req.flash('success');
    res.locals.error = req.flash('error');
    next();
})

app.use('/', userRoutes);

app.listen(3000, () => {
    console.log('Serving on port 3000')
})

我试过的事情删除cookie,添加for cookie Secure:True,Change Secure:False,更改密钥,Make re Save True and False,make saveUnInitialized True and False,更改会话名称,都不起作用,我怀疑Passport是问题所在,但不知道如何解决

3yhwsihp

3yhwsihp1#

Passport.authate(‘local’,{ailureFlash:True,ailureReDirect:‘/LOGIN’,Keep SessionInfo:True})

von4xj4u

von4xj4u2#

router.post('/#',
  passport.authenticate('local', {
    failureFlash: true,
    failureRedirect: '/login',
    keepSessionInfo: true
  })
);

相关问题