Я использую сеансовую аутентификацию в своем приложении Angular Universal.Проблема в том, что когда http-запрос сделан из приложения Angular, серверная часть (node.js) не обращается к текущему сеансу, а создает новый.Вы можете подумать, что это потому, что cors, но дело в том, что первая начальная загрузка не имеет доступа к сеансу.Поэтому, когда я открываю свое приложение на странице, на которой есть распознаватель или охранник, это делает http-запрос.Этот http-запрос создаст новую сессию.Затем переход на другие страницы в приложении, все работает.Запросы http, сделанные после начальной загрузки, получат доступ к сеансу.Если я начну со страницы, на которой нет средства распознавания / защиты, а затем перейду на страницу, на которой есть и выполняет http-запрос, этот запрос получит доступ к сеансу.
Вот как настраивается мой сеанс в index.js
:
var sessionStore = new MySQLStore(options);
app.use(
session({
key: 'sessionStorage',
store: sessionStore,
secret: config.get('demoSess'),
saveUninitialized: false,
resave: false,
name: 'demo',
cookie: {
maxAge: 60000,
secure: false
},
})
)
const cors = require('cors');
app.use(cors({
origin: [
'http://localhost:4200'
],
credentials: true
})
);
А вот так http-запрос делается из внешнего интерфейса:
this.http.get(environment.apiUrl+'/server/page/auth', {withCredentials: true});
Это так и должно быть?Backend работает через порт 8080 и frontend 4200.
В app.module.ts
я написал TransferHttpCacheModule
.Если я удаляю его, я вижу из бэкэнда, когда я что-то консолью записываю в журнал, что первый http-запрос выполняется дважды: первый не получает доступ к сеансу, а затем второй.Поэтому, если бы я набрал console.log(req.session.userId)
в /server/page/auth
, я бы получил undefined
и 1
на следующей строке.Когда я читал, что-то вроде этого было нормально, и чтобы обойти это, transferstate
вступает в игру, но, как я понимаю, TransferHttpCacheModule
- это в основном простой способ сделать transferstate
.Я также пытался записать transferstate
в распознаватель, и результаты были одинаковыми - только один запрос сделан, но этот запрос не будет иметь доступа к сеансу.
Я надеюсь, что что-то не хватает, когда я делаю http-запрос из внешнего интерфейсаили моя сессия / cors чего-то не хватает.На данный момент у меня заканчивается идея, что проверять или проверять, любой намек на то, что проверить, приветствуется.