1

私は Sapper を使ったプロジェクトに取り組んでいますが、しばらくの間、何かに苦労しています。よくわかりません。私は自分のサーバーに Polka を使用しており (sveltejs/sapper-template#rollupテンプレートに含まれていたので、それを使用しました)、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>

これは開発ではすべて正常に機能しますがnpm run build、本番用にビルドするとうまくいきません。session.userのリダイレクト後に が読み込まれていないようlogin.jsです。

私が取得したsessionオブジェクトはログイン後に設定されpreloadていませんsession.user。また、ログアウト時にsession.user単に null に設定され、クライアントがルートにリダイレクトされても、session.userまだ設定されています。

ブラウザを更新するsession.userと、正しい状態になります。更新なし – ログアウトしたばかりの場合は、ログインしているかのようにクリックできます。ログインしたばかりの場合は、何も起こりませsession.userundefined

開発ビルドでは機能するのに、本番環境では機能しない理由がわかりません。ブラウザーの更新時に状態が正しいことを考えるsession.userと、Cookie ミドルウェアの構成に問題はないと思います。私は何か他のものを見逃しているようです。どんな助けでも大歓迎です!

4

1 に答える 1