Экспресс-сессия узла не сохраняется в IPhone IOS - PullRequest
0 голосов
/ 04 июня 2018

У меня есть приложение, использующее Angular и Node (Nest JS), на стороне сервера я использую экспресс-сессию.В моем промежуточном программном обеспечении я добавляю зарегистрированного пользователя в сеанс:

req.session.user = user;

Когда пользователь пытается войти в систему с помощью Iphone, он не может войти.после устранения проблемы я обнаружил, что у каждого запроса свой идентификатор сеанса.Я вижу, что после того, как я инициализирую пользователя в сеансе, он работает нормально, но затем следующий запрос пуст (без пользовательского объекта) и имеет новый идентификатор.

Эта проблема возникает только в IOS.

Я пытался изменить параметры экспресс-сеансов: maxAge, httpOnly, resave, saveUninitialized и ничего не получалось.

Это мои экспресс-определения:

app.then(instance => {
    instance.use(compress({
        filter: function ( req, res ) {
            return (/json|text|javascript|css|font|svg/).test(res.getHeader('Content-Type'));
        },
level: 9
}))
if ( _.has(config, 'log.format') ) {
    instance.use(morgan(':method :url :status :res[content-length] - :response-time ms', Logger.getMorganOptions()));
}
instance.use(bodyParser.json());
instance.use(bodyParser.urlencoded({extended: true}));

instance.use(cookieParser(config.sessionSecret));

var MemoryStore = require('memorystore')(session);
instance.use(session({
    store: new MemoryStore({
        checkPeriod: 86400000 // prune expired entries every 24h
    }),
    saveUninitialized: true,
    resave: true,
    secret: config.sessionSecret,
    cookie: {
        maxAge: null,
        httpOnly: false,
    },
    name: config.sessionKey,
}));

var corsOptions = {
    origin: function ( origin, callback ) {
        var isWhitelisted = originsWhitelist.indexOf(origin) !== -1;
        callback(null, isWhitelisted);
    },
    credentials: true,
};
instance.use(cors(corsOptions));

instance.listen(3000, () =>
    console.log('Application is listening on port 3000')
)
});
...