Cookie в приложении MERN не настраивается в браузере - PullRequest
0 голосов
/ 28 января 2019

У меня проблемы с отображением файлов cookie запроса в инструментах разработчика Chrome моего домена переднего плана.Если я сделаю запрос на вход в систему, сессия cookie не будет настроена в браузере.Однако, если я сделаю запрос на вход в систему, перезагрузите внутренний домен и вернусь в внешний домен, я увижу cookie.У меня нет опыта работы с NodeJ, и я не знаю, является ли это ожидаемым поведением или я увижу, как cookie устанавливаются в домене переднего плана после того, как я сделаю запрос на вход в систему.

Вызов API интерфейса:

export function loginUser(User) {
    return fetch(LOGIN_URL, {
        method: 'POST',     
        headers: {
            'content-type': 'application/json',
        },
        xhrFields: {
            withCredentials: true
        },
        body: JSON.stringify(User)
    }).then(res => res.json()); 
}

сервер приложения app.js:

const express = require('express');
const morgan = require('morgan');
const helmet = require('helmet');
const cors = require('cors');
const passport = require('passport');
const session = require('express-session');
require('dotenv').config();
const middlewares = require('./middlewares');
const api = require('./api');

const app = express();


app.use(morgan('dev'));
app.use(helmet());
app.use(express.json());
app.use(cors());
require('./config/passport')(passport);
app.use(session({
  "name": "sessionCookie",
  "secret": "some-secret",
  "rolling": true,
  "saveUninitialized": true,
  "resave": false,
  cookie : { secure : false, httpOnly: false, maxAge : (4 * 60 * 60 * 1000) }
}));

app.use(passport.initialize());
app.use(passport.session());

passport.js:

const LocalStrategy = require('passport-local').Strategy;
const bcrypt = require('bcryptjs');
const db = require('../db');

// Load User model
const Users = db.get('users');

module.exports = function(passport) {    
  passport.use(
    new LocalStrategy({ usernameField: 'email' }, (email, password, done) => {
      // Match user
      Users.findOne({
        email: email
      }).then(user => {        
        if (!user) {

          return done(null, false, { message: 'That email is not registered' });
        }

        // Match password
        bcrypt.compare(password, user.password, (err, isMatch) => {
          if (err) throw err;
          if (isMatch) {           
            return done(null, user);
          } else {
            return done(null, false, { message: 'Password incorrect' });
          }
        });
      });
    })
  );

  passport.serializeUser(function(user, done) {
    console.log('serialize u', user);
    done(null, user._id);
  });

  passport.deserializeUser(function(id, done) {
    console.log('desss', id);
    Users.findOne({_id: id}.then(function(err, user) {     
      done(err, user);
    }));
  });
};

вход в систему:

router.post('/login', (req, res, next) => {
    passport.authenticate('local', function(err, user, info) {        
        if (err) { return next(err); }

        req.logIn(user, function(err) {            
            if (err) {return next(err); }

            console.log('successful log in', req.user);   **<--- successfully logs in user**
            console.log('sesion', req.session);  **<--- succesfully returns session object**
            return res.json(user);
            //   return res.redirect('/');
        });
      })(req, res, next);
  });

Заранее спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...