Pasport.js создаёт ещё одну сессию

372
08 марта 2017, 19:32

В общем такая проблема. Делаю авторизацию для node.js приложения используя Passport.js и локальную стратегию авторизации. При первой загрузки страницы express-session создает пустую сессию в Mongo DB, и cookie для определения этой сессии. Когда я авторизуюсь passport, создает ещё одну сессию но уже с данными пользователя, и получаеться что куки определяют пустую сессию.

Cookie читают сессию U0jZB1hyyTufzng6gRM9sH-B1hTS95eM, но в ней нет нужных данных пользователя они в 8Yw-dXn2kkrxDNqOryi81W2u7jkxBQgb

App.js

import express      from 'express';
import cookieParser from 'cookie-parser';
import session from 'express-session';
import passport from 'passport';
import React                     from 'react';
import ReactDOM                  from 'react-dom/server';
import { Provider }              from 'react-redux';
import { match, RouterContext }  from 'react-router'
import escapeHTML                from 'lodash/string/escape';
import bodyParser  from 'body-parser';
import flash  from 'express-flash';
import {
    fetchComponentsData,
    getMetaDataFromState,
} from './utils';
import routes         from '../shared/routes.jsx';
import configureStore from '../shared/store/configureStore';
import clientConfig from '../etc/client-config.json';
import api from './api';
import mongoose from './lib/mongoose';
require('./lib/passport.js')(passport)
const app = express();
const secretKey = 'mySecretKey';

app.use(bodyParser.json({ limit: 1024 * 1024, verify: (req, res, buf) => {
    try {
        JSON.parse(buf);
    } catch (e) {
        res.status(0).send({
            error: {
                code: 'BROKEN_JSON',
                message: 'Please, verify your json'
            }
        });
    }
} }));
app.use(cookieParser(secretKey));
const MongoStore = require('connect-mongo')(session);

app.use(session({
    secret: secretKey,
    resave: true,
    rolling: true,
    saveUninitialized: true,
    store: new MongoStore({ mongooseConnection: mongoose.connection }),
    cookie: {
        httpOnly: true,
        maxAge: 14 * 24 * 3600000, // 2 недели
        secure: false
    }
}));

app.use(passport.initialize());
app.use(passport.session());
app.use(flash())
app.use('/static', express.static('public/static'));

app.use('/api/v1', api);

pasport.js

import mongoose      from './mongoose';
import './models/User';
const LocalStrategy  = require('passport-local').Strategy;
const User           = mongoose.model('users');
module.exports = function(passport) {
    passport.serializeUser(function(user, done) {
        console.log('serializeUser1 = ', user.id)
        done(null, user.id);
    });
    passport.deserializeUser(function(id, done) {
        console.log('deserializeUser = ', id)
        User.findById(id, function(err, user){
            err
              ? done(err)
              : done(null, user);
        });
    });

    // Локальная авторизация
    passport.use('local-login', new LocalStrategy({
        usernameField : 'username',
        passwordField : 'password',
        passReqToCallback : true //
    },
    function(req, username, password, done) { // callback with email and password from our form
        User.findOne({ 'username' :  username }, function(err, user) {
            if (err)
                return done(err, req.flash('info', 'Неизвестная ошибка'));
            if (!user)
                return done(null, false, req.flash('info', 'Пользователь не найден')); // req.flash is the way to set flashdata using connect-flash
            if (!user.validPassword(password))
                return done(null, false, req.flash('info', 'Неверный пароль')); // create the loginMessage and save it to session as flashdata
            return done(null, user);
        });
    }));
};

auth.js

import passport from 'passport';
module.exports = {
    login: function(req, res, next) {
        passport.authenticate('local-login', function(err, user, info) {
            if (err) { return next(err); }
            if (!user) { return res.redirect('/login'); }
            req.logIn(user, function(err) {
                if (err) { return next(err); }
                console.log(user);
                next()
            //   return res.redirect('/users/' + user.username);
            });
        })(req, res, next);
    },
    isAutStatus: function(req, res, next) {
        // console.log('1111', req.user, req.isAuthenticated())
        req.isAuthenticated()
        ? next()
        : req.body.authStatus = 'Не авторизован'
        next()
    }
};

route.js

import express from 'express';
import routesFunc from './lib/routes';
import authMiddleware from './lib/middlewares/auth'
const router = new express.Router();
const routes = routesFunc();
// Пользователи
router.post('/user/register', authMiddleware.isAutStatus, routes.users.register.bind(routes.users));
router.post('/user/login', authMiddleware.isAutStatus, authMiddleware.login, routes.users.login.bind(routes.users));
router.get('/user/checkSession', routes.users.checkSession.bind(routes.users));
export default router;
READ ALSO
Не открывается изображение для обрезки Jcrop

Не открывается изображение для обрезки Jcrop

Есть скрипт когда пытаюсь сделать превью то превю фото не открывается, но если готовое фото вставить то все работает по ссылке то есть так...

319
Тригер на изменение текста в инпуте

Тригер на изменение текста в инпуте

Какое событие нужно использовать, чтобы оно срабатывало каждый раз, когда в инпут добавляется новый символ?on('change') срабатывает только тогда,...

249
Регистрация обработчиков событий в JavaScript при переборе элементов документа

Регистрация обработчиков событий в JavaScript при переборе элементов документа

Этот вопрос не дубликат, так как он затрагивает не только замыкания, но и иные распространённые ошибки в JS, а также их устранения используя...

287
Настройка Jquery Image Zoom Plugin

Настройка Jquery Image Zoom Plugin

имеется интернет-магазин "товаров интимного здоровья" на WPписал не я, мне достались лишь доработки

207