本地存储为空

Local storage is empty

我创建了一个使用 oauth 的 SPA,它似乎可以工作,但是如果我第一次打开该应用程序就会出现问题。

然后本地存储接缝被清除。

我的应用程序是用 vue 编写的,但我觉得这不是 vue 问题。

这是我执行重定向的代码。

    let nonce = '';
    const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
    for (let i = 0; i < 32; i++) {
        nonce += characters.charAt(Math.floor(Math.random() * characters.length));
    }
    document.cookie = nonce;
    localStorage.setItem('nonce', nonce);
    windows.location.href = 'my-oauth-url...';

这是我在重定向后验证随机数的代码:

    if (to.path.includes('/callback')) {
        const urlSearch = new URLSearchParams(to.hash);
        const nonce = extractResponseNonce(urlSearch);
        alert('stored nonce ' + localStorage.getItem('nonce'));
        alert('cookie ' + document.cookie)
        console.log('stored nonce ' + localStorage.getItem('nonce'))
        console.log('state ' + store.state.nonce)
        console.log('extracted nonce ' + nonce)
        // using document.cookie works
        if (localStorage.getItem('nonce') != nonce) {
            next('/error/nonceError')
            return
        }
}

如果我使用 localstoreage 比较 nonce,我得到 null,然后转到 nonce 错误页面。

如果我在一切正常后再次重做登录过程。

在执行第一次重定向之前,我通过警报检查了该值是否已设置。

PS:我一直使用firefox的私有模式来测试这个应用程序(我认为这不重要)。

您知道为什么 localstorage returns 对我来说是空的,但 cookie 已正确填充吗?

问题是 http 和 https 之间的转换。

我刚刚在我的浏览器中调用了 http,因为这是一个测试设置,所以我没有重定向到 https。
但是 redirect-URL 回到我的前端使用 https,然后 local-storage 是空的,因为 url 改变了。
另一方面,cookie 不介意 http 或 https,它只是固定在域中。