【发布时间】:2021-03-09 17:49:25
【问题描述】:
我在 Angular 中使用 StompJS ng2-stompjs。请求通过 JWT 身份验证。
我编写了一个 HttpInterceptor,当任何 http 响应返回错误 401 时,它会注销用户。我想用 websocket 实现类似的行为。我的应用程序仅在某些页面上使用 websocket 通信,因此我无法跟踪它们的令牌是否过期。 我还必须使用 Stomp,因为我必须订阅主题,据我所知,通过标准 typescript 或 rxjs websockets 是不可能的。
所以问题如下: 当token出错时,我可以在控制台看到如下错误:
client.js:274 WebSocket 连接到“ws://...”失败:HTTP 身份验证失败;没有可用的有效凭据
如果我启用了调试模式,Stomp 还会在控制台中通知我连接被关闭。但是,当我收到此类身份验证错误时,我想知道代码级别。
在这个 ng2stomp 实现中,我只能找到一个 webSocketErrors$ 主题,该主题会在发生此错误时通知我,但它只发回一个打字稿 Event,没有相关数据。
从这个错误中我无法判断是突然失去连接,还是后端错误,或者用户实际上是未经授权的,因此当我发现这个错误时,我无法强制注销。
我还没有尝试过使用标准的 StompJS 库,但我不确定它是否可以捕捉到这个错误。除了使用 Stomp 之外,我也不知道是否有其他方式可以订阅主题,因为这是我目前找到的唯一解决方案。
感谢任何建议。
【问题讨论】: