重新加载当前页面以填充会话

Ari*_*Ber 4 session goto svelte sapper

我遇到登录后会话未填充的问题,但如果我手动刷新页面,它就会填充。因此,作为一种解决方法,我尝试在登录成功后重新加载登录页面,以便会话中填充数据。

如何使用 goto?我厌倦了 goto('/') 但它打开了索引页。我正在寻找动态的东西,而不是使用页面名称。

有人知道如何在不重新加载页面的情况下填充会话吗?session 被填充到 server.js coed 中的 'sapper.middleware' 中。

Ric*_*ris 7

因为session是一个商店,所以您可以在浏览器中写入它,只要您小心地匹配服务器端填充的内容即可。这是一个有用的模式:

<script>
  import { stores } from '@sapper/app';

  const { session } = stores();

  async function login() {
    const res = await fetch('auth/login', {
      credentials: 'include',
      method: 'post',
      body: JSON.stringify(whatever)
    });

    if (res.ok) {
      session.update(store => ({
        ...store,
        user: await res.json()
      });
    } else {
      // handle the error
    }
  }
</script>

{#if $session.user}
  <h1>Welcome back {$session.user.name}!</h1>
{:else}
  <button on:click={login}>log in</button>
{/if}
Run Code Online (Sandbox Code Playgroud)

如果您确实需要强制重新加载,location.reload()那就可以了。