使用通用cookie在未定义的第一个渲染返回上获取cookie

时间:2018-09-20 10:16:36

标签: javascript reactjs cookies

我正在使用universal-cookie并尝试在第一个渲染器上获取cookie。但是,它返回undefined,但是当我刷新页面时可以看到它。

首先,我需要导入cookie包:

class PosAdmin extends Component{

cookies = new Cookies();

.....

然后,我需要设置cookie,就像这样。在我的诺言中,我得到了:

.then(result => {
            if (result.value) {
                const cookieId = uuidv4();
                this.cookies.set(cookieDevicePairConstants.POS,
                    cookieId,
                    {
                        path: '/admin',
                        maxAge: 31536000
                    });
                const posToSelect = {
                    ...pos,
                    cookieId
                }
                this.props.updateSelectedPos({
                    variables: {
                        pos: posToSelect
                    }
                }).then(() => {
                    this.props.pairPosWithDevice({
                        variables: {
                            posId: posToSelect.id,
                            cookieId
                        }
                    });
                    }).then(() => {
                        this.props.posQuery.updateQuery((prev) => {
                            const newData =
                                prev.getPoses.map(pos => posToSelect.id === pos.id ? posToSelect : pos);
                            return { getPoses: newData };
                        });
                    });
            }
        });

当我尝试获取Cookie时,我正在render内执行此操作:

let thisDeviceCookieId = this.cookies.get(cookieDevicePairConstants.POS);

但是它首先返回undefined,但是刷新页面后,我可以在其中看到值。我绝对不知道出了什么问题,我对我所能获得的所有帮助表示赞赏。

感谢您抽出宝贵的时间阅读。

1 个答案:

答案 0 :(得分:1)

这是一篇很老的文章,所以我确定我的回答为时已晚,但是我本人最近也遇到了类似的问题,希望我能在某个地方帮助某人。

在某些情况下,当cookie的sameSite属性设置为“严格”时,尤其是在第三方网站重定向到我的站点时,我注意到了这一点。这不仅是通用cookie的问题,因为document.cookie属性中也缺少cookie。确保cookie的sameSite属性设置为“ lax”,“ none”或“ unset”,或者确保cookie的“ path”属性与第三方重定向到的路径完全相同(未经测试)这个)。我怀疑是否“未设置”某些浏览器安全设置可能默认为严格设置?无论如何,更改cookie的sameSite属性都会为我解决此问题。