【问题标题】:Synchronous $resource in AngularJSAngularJS 中的同步 $resource
【发布时间】:2013-08-29 10:01:45
【问题描述】:

我陷入了死胡同,因为我知道 Javascript 不是为同步工作而设计的,尤其不是 AngularJS。但是,我处于需要它的情况。

我在域“www”(使用 AngularJS)上有一个主页,它经常调用“api”。 “api”上的某些资源需要身份验证,因此它返回一个 401,然后 AngularJS 会在看到时拾取并显示一个登录框。

www-login 支持多种登录方法,并将密码/oauth/whatever 发送到“api”,后者返回 Angular 应用程序存储在 cookie 中的令牌,并设置为 $http.defaults.headers.common['Authorization'],因此可以用于验证对 api 的进一步请求。

同样的方法也用于获取属于api-token的用户名。

这完美地工作并解决了我的设计目标。但是,如果浏览器要访问需要身份验证的 url,则会出现 401(因此会弹出登录框)。这是(我猜)因为 Angular 在 401 访问浏览器之前无法填充标头中的 Authorization 字段..

解决方案?

  1. 有一个使用 jquery 的 async=false 请求?
  2. 获取所需数据后关闭登录框。登录框可能会闪烁...
  3. 在 cookie 中存储更多关于登录的元数据(即用户名),因此我们不必在应用加载时从服务器获取这些信息。
  4. ??

有没有更好的解决方案?这一次,对于这一个请求,我希望我的 Angular 资源中有 async=false ......

【问题讨论】:

    标签: javascript authentication angularjs cookies


    【解决方案1】:

    我寻求的解决方案(效果很好)是在异步请求之前设置$http.defaults.headers.common['Authorization'] = 'Token ' + old_api_token;。然后在异步请求完成时覆盖它(如果它已更改)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-11
      • 2016-08-02
      • 1970-01-01
      • 1970-01-01
      • 2012-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多