【问题标题】:HowTo: AngularJS Basic Auth + cookie to a REST API server?如何:AngularJS Basic Auth + cookie 到 REST API 服务器?
【发布时间】:2015-02-13 02:15:21
【问题描述】:

我想以正确的方式使用 AngularJS 处理基本身份验证。我很确定答案在某处,但我没有找到。似乎每个人都有关于身份验证的特殊需求,我很困惑。 请注意,我对身份验证没有特别的了解,所以很抱歉提出一些愚蠢的问题。

案例

  • Django 服务器上的 REST API,用于处理 HTTP 基本身份验证(服务器)
  • 一个嵌入在 Cordova/Phonegap 中的 AngularJS 应用程序,用于智能手机(客户端)
  • 客户端使用 HTTP 基本身份验证登录。它是无状态的,这意味着客户端需要为每个 API 调用、每个 Web 服务提供凭据。

目前有效的方法

现在可以通过这种方式登录:

  • 用户看到登录页面,输入其电子邮件/密码并验证
  • angularJS 客户端使用 $cookiestore 在 cookie 中设置凭据
  • angularJS 客户端使用 $http 调用 GET 到 http://myapp.com/api/login 并在 HTTP 标头中使用凭据(基本身份验证)
  • 如果请求成功,则认为用户已登录。
  • 之后,由于 cookie 存储凭据,这些凭据会在每次 Web 服务调用的 HTTP 标头中发送。

它按预期工作。

这是怎么回事

该系统的唯一问题是,当智能手机应用程序(即 angularJS/Cordova 应用程序)关闭时,一切都会丢失,用户需要重新登录。

我该如何解决?非常感谢。

【问题讨论】:

  • 这只是一个想法,您的 cookie 过期日期是多长时间?或者另一种解决方案,从 cookie 到令牌,在消息的帖子正文中传递......就像 JWT angular-tips.com/blog/2014/05/json-web-tokens-introduction
  • This link 表明在 AngularJS 中管理 cookie 过期日期非常复杂 :(
  • 好吧,如果您使用 SSL 和自己的令牌管理,它并没有那么复杂...您只需要知道前端是否是通过用户/密码进行身份验证的那个...
  • 刚刚发现“本地存储”可能是另一种解决方案...我会尝试两种解决方案并回来。感谢您的帮助。
  • 通过 MD5 散列登录时间戳生成一个令牌,并在成功登录后附加一个只有您知道的字符串作为对帖子正文中的请求的响应...您的应用程序将其保存到本地存储并随每个对服务器的请求......结合 SSL,或者现在 TLS 应该可以完成这项工作

标签: angularjs rest cordova authentication basic-authentication


【解决方案1】:

实际上,Cordova 似乎会在应用程序关闭时删除 cookie(即使过期日期设置在将来),现在有办法解决这个问题。

但是,使用 LocalStorage 代替 cookie 可以完美地解决问题。它的使用方式与 cookie 基本相同,因为它是一个 key->value 存储。它甚至更干净。

This article 是对 localStorage 的一个很好的介绍。

【讨论】:

    猜你喜欢
    • 2020-11-09
    • 2015-06-10
    • 1970-01-01
    • 2018-06-20
    • 2017-02-26
    • 2017-06-25
    • 1970-01-01
    • 2014-05-29
    • 1970-01-01
    相关资源
    最近更新 更多