仅授权订阅的网络推送唯一设备 ID
Web Push unique device ID for auth-only subscriptions
在我的网络应用程序中,我只需要向登录用户发送网络推送通知,但在他们的所有设备中,因此,我仅在用户登录时提示通知,并将他的订阅存储在我的数据库中:端点、auth 和 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。
或者您有其他想法?
当用户从设备注销时,您可以读取推送端点,并将其发送到服务器以进行删除。
在我的网络应用程序中,我只需要向登录用户发送网络推送通知,但在他们的所有设备中,因此,我仅在用户登录时提示通知,并将他的订阅存储在我的数据库中:端点、auth 和 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。 或者您有其他想法?
当用户从设备注销时,您可以读取推送端点,并将其发送到服务器以进行删除。