ng-token-auth,ionic,devise_token_auth;令牌在xhr请求中随机丢失

时间:2015-12-08 00:08:45

标签: angularjs angular cordova ruby-on-rails-4 devise-token-auth

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

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

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

我知道Rails,但我不熟悉Angular,既不是Ionic,也不知道到底在哪里。

在阅读了大量的SO答案之后,似乎没有人遇到我的问题(在本地和分期/制作中发生),我检查了以下内容

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

令我感到困惑的是,它只发生在有时而且并非总是如此。 (并且后端没有错误)

我发现in the devise_token_auth documentation的唯一解决方法是将config.change_headers_on_each_request更改为false,从而避免以此方式重新生成令牌。

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

1 个答案:

答案 0 :(得分:0)

请检查一下:

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

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

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

  • 环境信息:您的应用程序与 reference implementation 有何不同?

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

    路由:您是否使用了一些疯狂的命名空间、范围或约束?

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

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

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