0

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

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

www-login 支持一系列登录方法,并将密码/oauth/whatever 发送到“api”,该“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 ......

4

1 回答 1

0

The solution I went for (which works perfectly) is to set $http.defaults.headers.common['Authorization'] = 'Token ' + old_api_token;, before the async request. And then overwrite it when the async request is done (if it have changed).

于 2013-08-30T15:54:07.383 回答