Я работаю над проектом, использующим Sapper, и уже некоторое время борюсь с чем-то - не могу понять это.Я использую польку для своего сервера (он был включен в шаблон sveltejs/sapper-template#rollup
, поэтому я использовал его) и cookie-session
для промежуточного программного обеспечения сеанса.
Вот моя полькаконфигурация, где я сеансовые данные сеанса также:
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
просто устанавливается равным нулю, а клиент перенаправляется наroot, session.user
все еще заполнен.
Если я обновлю браузер, session.user
будет в правильном состоянии.Без обновления - если я только что вышел из системы, я могу щелкнуть вокруг, как будто я вошел в систему, и если я только что вошел в систему, ничего не произойдет, так как session.user
- это undefined
.
Просто не знаю, почему это такбуду работать над разработкой, но не на производстве.Учитывая, что при обновлении браузера состояние session.user
является правильным, я предполагаю, что это не проблема с конфигурацией промежуточного программного обеспечения cookie.Кажется, я что-то упускаю.Любая помощь будет принята с благодарностью!