【发布时间】:2020-05-17 23:09:06
【问题描述】:
在我的网络应用程序中,我只需要向登录的用户发送网络推送通知,但在他们的所有设备中,我只在用户登录时提示通知,并将他的订阅存储在我的数据库中:端点、身份验证和 p256dh 密钥,以及用户 ID。
但这发生在每个用户的设备上,因此他可以登录多个设备并使用不同的端点和密钥多次存储。 所以,在我的数据库中,我有这些行:
USER_ID 1, and all his PC's subscription keys
USER_ID 1, and all his mobile's subscription keys
现在,我希望当用户注销时,从数据库中删除他注销的设备上的订阅,但要做到这一点,我需要知道哪个订阅属于哪个设备。 问题是:我不能只知道它。
我不能通过存储设备的 IP 来做到这一点,因为它是同一个网络并且没有意义,因为 IP 可以是动态的。
我不能通过用户代理来做到这一点,因为用户代理只能手动编辑,而且一个用户可以拥有两个相同的设备和相同的用户代理。
我无法通过将其存储在设备的本地存储中来做到这一点,因为我需要旧版浏览器的支持。
我不能通过将其存储在 cookie 中来做到这一点,因为人们可以删除该 cookie,而我不知道应该使用哪个令牌。
我该怎么办?有没有办法在 JS 中唯一标识用户而无需自己生成 ID?比如,idk,访问设备 ID。 还是您有其他想法?
【问题讨论】:
标签: javascript node.js web-push