Я работаю над проектом с использованием Sapper, и сейчас немного борюсь с чем-то - не могу понять. Я использую Polka для своего сервера (он был включен в шаблон sveltejs/sapper-template#rollup
, поэтому я выбрал it) и cookie-session
для промежуточного программного обеспечения сеанса.
Вот моя конфигурация Polka, в которой я также исходные данные сеанса:
polka()
.use(
compression({ threshold: 0 }),
sirv('static', { dev }),
cookieSession({
name: 'session',
keys: [
'6e818055-d346-4fcb-bf56-4c7d54cb04ab',
'60f3e980-6e9c-460d-8ea7-af1fffbdb92f'
]
}),
sapper.middleware({
session: (req, res) => ({
user: req.session.user
})
})
)
.listen(PORT, err => {
if (err) console.log('error', err);
});
Когда пользователь входит в систему, он обрабатывается routes/login.js
, по сути, некоторая информация профиля и токены устанавливаются на session.user
, а запрос перенаправляется обратно на корневой путь. Я использую @polka/send-type
, чтобы ответить. См. ниже:
req.session.user = {
accessToken: access_token,
name: first_name,
pic: picture.data.url
};
send(res, 302, '', {
Location: appUrl
});
Там у меня есть модуль предварительной загрузки для routes/index.svelte
проверок, существует ли session.user
, и если да, перенаправляет на панель инструментов:
<script context="module">
export async function preload(page, session) {
const { user } = session;
if (user) {
return this.redirect(302, "dashboard");
}
}
</script>
Все это отлично работает в dev, но когда я npm run build
строю для производства, это не очень хорошо. Похоже, что session.user
не заполняется после перенаправления в login.js
.
Объект session
, который я получаю в preload
, не имеет session.user
, установленного после входа в систему, и наоборот, при выходе из системы, где session.user
просто имеет значение null, а клиент перенаправляется в корень, session.user
все еще заполнен.
Если я обновлю браузер, session.user
находится в правильном состоянии. Без обновления - если я только что вышел из системы, я могу щелкнуть мышью, как если бы я вошел в систему, а если я только что вошел в систему, ничего не происходит, поскольку session.user
это undefined
.
Просто не уверен, почему это сработает в сборке разработчика, но не в продакшене. Учитывая, что состояние session.user
является правильным при обновлении браузера, я предполагаю, что это не проблема с конфигурацией промежуточного программного обеспечения cookie. Похоже, я чего-то не хватает. Любая помощь будет очень признательна!