В общем такая проблема. Делаю авторизацию для 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;
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Виртуальный выделенный сервер (VDS) становится отличным выбором
Есть скрипт когда пытаюсь сделать превью то превю фото не открывается, но если готовое фото вставить то все работает по ссылке то есть так...
Какое событие нужно использовать, чтобы оно срабатывало каждый раз, когда в инпут добавляется новый символ?on('change') срабатывает только тогда,...
Этот вопрос не дубликат, так как он затрагивает не только замыкания, но и иные распространённые ошибки в JS, а также их устранения используя...
имеется интернет-магазин "товаров интимного здоровья" на WPписал не я, мне достались лишь доработки