2013-08-26 39 views
0

我处于死路一条,因为我知道Javascript并不是用于同步工作,特别是不是用于AngularJS。但是,我处于一种需要它的状态。

我在域名“www”(带有AngularJS)上有一个主页,这个页面调用了很多“api”。 “api”上的一些资源需要身份验证,因此它会返回401,而AngularJS会在它看到时接收并显示登录框。

www登录支持一堆登录方法,并将密码/ oauth /无论发送到“api”,它返回角应用程序存储在cookie中的令牌,并设置在$http.defaults.headers.common['Authorization']中,以便它可以使用验证对api的进一步请求。

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

这工作完美,解决了我的设计目标。但是,如果浏览器转到需要验证的网址,则401(因此弹出登录框)。这是(我猜),因为角度是不能够填充401之前浏览器的标题中的授权字段..

解决方案?

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

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

回答

0

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