Неправильная настройка сеанса Sapper в производственной сборке без перезагрузки страницы - PullRequest
1 голос
/ 19 сентября 2019

Я работаю над проектом, использующим 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.Кажется, я что-то упускаю.Любая помощь будет принята с благодарностью!

...