编辑1
在用例中我没有弄清楚的一件事是,浏览器不需要显示UX即可进行身份验证,或者至少它是可选的。
var credential = await navigator.credentials.get({
password: true,
mediation: "silent",
federated: {providers: federatedProviderURL}}
);
如果用户已注销或从UA删除密码,则它将失败(凭据== null)。
凭据规范编写者可能会规定,如果从ServiceWorker进行调用,则中介必须是“静默的”,否则,并且如果没有可用的UI,则:-
错误-NOUI操作要求UI完成
但是这里的重点是,在大多数情况下,可以进行无 key 重新认证。
那会改变一切吗?
干杯理查德
原始帖子:-
如果我的ServiceWorker中的Fetch从服务器收到401,如果我没有焦点或前景的客户端,该如何与服务器重新进行身份验证?
注意:我说的是POST请求更新服务器,而不仅仅是从缓存中读取直到网络恢复。
让客户重新关注?对于没有采取任何措施引起该 react 的用户而言,这很可怕,而且他们可能仍然无法在那里再次登录。
如果收到401,Background-Synch会做什么?
如果将navigator.credentials显示在ServiceWorker中就足够了!
永不过期的 session ?
别人在做什么?
再次禁止我进入W3C/IETF Github :-(
如果有人可以将以下内容添加到ServiceWorker issues会有所帮助:-
请参阅Use-Case
如果用户 session 已过期,则ServiceWorker当前没有可用于与服务器重新进行身份验证的机制,因为没有可用于确定凭据的启发式机制。
如果credentials.get()可用,则重新认证可以透明地进行。如果是联盟的(例如Google),那么如果用户已注销,则该状态将受到尊重。
最佳答案
似乎以前对此进行过讨论。请参阅GitHub
我认为后台重新认证应该很少发生,以使登录或失败通知是一种适当且用户友好的解决方案。
如果您有任何想法,请在那边评论!
关于javascript - 如何在ServiceWorker中处理 session 过期,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47320790/