AngularJS中的同步$资源

时间:2013-08-26 20:07:11

标签: javascript authentication angularjs cookies

我处于死胡同,因为我知道Javascript不是用于同步工作,特别是AngularJS。但是,我处在一个需要它的情况下。

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

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

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

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

解决方案?

  1. 使用jquery生成async = false请求?
  2. 完成我们想要的数据后,关闭登录框。登录框可能会闪烁......
  3. 在Cookie中存储更多有关登录信息的元数据(即用户名),因此我们无需在加载应用时从服务器获取此信息。
  4. ...
  5. 有更好的解决方案吗?这一次,对于这一个请求,我想在我的Angular资源中使用async = false ....

1 个答案:

答案 0 :(得分:0)

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