首页 > 解决方案 > 仅授权订阅的 Web 推送唯一设备 ID

问题描述

在我的网络应用程序中,我只需要向登录的用户发送网络推送通知,但在他们的所有设备中,我只在用户登录时提示通知,并将他的订阅存储在我的数据库中:端点、身份验证和 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。还是你有其他想法?

标签: javascriptnode.jsweb-push

解决方案


当用户从设备注销时,您可以读取推送端点,并将其发送到服务器以进行删除。


推荐阅读