我想用Meteor创建一个购物车,允许未登录的访客拥有持久的购物车。
据我所知,在Meteor中跟踪未登录访问者的唯一方法是在客户端(localStorage)上设置持久ID,然后在每个订阅和方法调用中传递该ID。
大多数Web框架在cookie中存储唯一的会话ID,并且每次向服务器发送请求时都会发送cookie,因此服务器始终可以识别发送请求的访问者 - 为什么在Meteor中没有类似的功能? / p>
看起来Meteor在localStorage中持久存在userId(如果已登录)并通过DDP连接将该userId发送到服务器 - 但这仅在用户登录时有用。为什么不对所有访问者完成此操作通过sessionId?
我在这里遗漏了什么吗?欢迎使用其他技术 - 我只想清理我的代码而不必在任何地方传递sessionId。
答案 0 :(得分:0)
我猜测购物车是您的用户集合架构中的一个字段。
相反,将Cart
设为自己的集合,并将userID
作为外键。
然后,如果用户未登录,您可以使用localStorage令牌作为ID:localStorage.getItem('Meteor.loginToken')
。
最后,当用户注册时,在您的createUser
回调中,您会搜索带有该令牌的购物车。如果存在,请将其更新为新的userId。
对于分析而言,这也快一点,因为您不必遍历整个用户集合来获取购物车对象。
答案 1 :(得分:0)
你对流星不支持你可以在这里阅读更多http://info.meteor.com/blog/session-cookies的cookie,我的建议是使用本地存储来保存客户端而无需登录。另请参阅如何在javascript Create GUID / UUID in JavaScript?
中创建UUID//我先评论并在此发布,因为我认为这是我的两分钱的答案。