16

我继承了一个 Ionic 应用程序,它使用ng-token-auth+devise_token_auth来处理身份验证和前后之间的会话。

发生的事情很奇怪。有时(特别是在连接速度较慢的情况下)请求(或响应)会丢失,之后我只会收到401http 错误。

我知道每次我发送请求时令牌都会过期,但是当xhr请求被取消时(我想是由服务器或浏览器,我不知道)令牌已过期而没有被新生成的替换由devise_token_auth宝石。

我知道 Rails,但我不熟悉 Angular,Ionic 也不熟悉,我也不知道该去哪里找。

在阅读了很多 SO 答案后,似乎没有人遇到我的问题(在本地和暂存/生产中发生),我检查了以下内容

  • storage设置为localStorage
  • config.batch_request_buffer_throttle = 20.seconds
  • 取消的请求之间没有模式,有时我为用户名执行获取,有时是帖子或评论。
  • 不是 CORS 问题,因为它总是会发生或永远不会发生。(此外,我正在使用代理,如ionic blog中所述)
  • 也许它可能与临时标题chrome 错误有关。但是,我怎么能确定呢?

令我困惑的是,它只是有时而不是总是发生。(并且后端没有错误)

在 devise_token_auth 文档中找到的唯一解决方法是更改config.change_headers_on_each_request​​为false避免以这种方式重新生成令牌。

但我不喜欢这种解决方案,因为我认为它以不安全的方式隐藏了真正的问题,而不是解决令牌丢失问题。有什么建议吗?

4

1 回答 1

0

请检查这个东西:

  • 版本:您使用的是这个 gem 的哪个版本(以及ng-token-authjTokerAngular2-Token,如果适用)?

  • 请求和响应标头:可以在浏览器的 Web 检查器的“网络”选项卡中找到这些标头。

  • Rails Stacktrace:可以在 API 的 log/development.log 中找到。

  • 环境信息:您的应用程序与参考实现有何不同?

    这可能包括(但不限于)以下详细信息:

    Routes:你在使用一些疯狂的命名空间、范围或约束吗?

    Gems:您使用的是 MongoDB、Grape、RailsApi、ActiveAdmin 等吗?

    自定义覆盖:您在 [自定义控制器覆盖] 5方面做了什么?

    自定义前端:您使用 的是ng-token-authjTokerAngular2- Token还是其他?

于 2021-02-20T08:12:31.810 回答