проблема с connect-mongo и паспортом, потеря логина пользователя после обновления страницы - PullRequest
0 голосов
/ 17 апреля 2019

Что я могу сказать, так это то, что connect-mongo, кажется, выполняет свою работу должным образом, потому что я могу видеть сессии, хранящиеся в моем mongodb, каждый раз, когда я вхожу в свое приложение.

Логика моего приложенияв том, что успешный вход в систему приводит меня к странице администратора.но если я обновлю браузер, я вернусь на страницу входа в систему, и моя переменная isAuthenticated (заданная в угловом переднем углу) выдает в консоли значение false.

Я предполагаю, что я не могу правильно сохранить сохраненный сеанс?Я покажу вам фрагменты кода логики:

App.js

const express = require('express');
const app = express();
const api = require('./api/v1');
const auth = require('./auth/routes');
const mongoose = require('mongoose');

// logger
// const morgan = require('morgan');
const bodyParser = require('body-parser');
// to allow request from my Angular test client that use another port
const cors = require('cors');

// passport local
const passport = require('passport');
const cookieParser = require('cookie-parser');
const session = require('express-session');
const Strategy = require('passport-local').Strategy;
// to retrieve users from the MongoDB users collection
const User = require('./auth/models/user');

app.use(cookieParser());
//a session needs a secret to create a cookie

const MongoStore = require('connect-mongo')(session);
const connection = mongoose.connection;

app.use(session({
    secret: 'my super secret',
    resave: true,
    saveUninitialized: true,
    store: new MongoStore({ mongooseConnection: connection }),
    name: 'antlab-cookie'
}));
app.use(passport.initialize());
app.use(passport.session());

// passport will add a user to the session...
passport.serializeUser((user, cb) => {
    cb(null, user);
});
//...and retrieve it from session
passport.deserializeUser((user, cb) => {
    cb(null, user);
});

маршруты

const express = require('express');
const router = express.Router();
const User = require('../models/user');
const passport = require('passport');

router.post('/register', (req, res) => {
    console.log('user from req.body >>>', req.body);
    const newUser = new User(req.body);
    newUser.save((err, user) => {
        if (err) {
            return res.status(500).json(err);
        }
        // we login the user that has just been created
        req.logIn(req.body, (err) => {
            if(err) {
                console.error('err in register | req.logIn()', err);
            }
        });
        res.status(201).json(user);
    });
});

router.post('/login', passport.authenticate('local', {
    successRedirect: '/auth/success',
    failureRedirect: '/auth/failure'
}));

router.get('/success', (req, res) => {
    res.status(200).json({ msg: 'logged in', user: req.user });
});

router.get('/failure', (req, res) => {
    res.status(401).json({ msg: 'NOT logged in' });
});

router.get('/logout', (req, res) => {
req.logout();
res.status(200).json({msg: 'logged successfull'});
});

И полные файлы, еслинужно?

App.js https://pastebin.com/BT3hpk9L

rout.js https://pastebin.com/TpwxTkJS

...