我处于死胡同,因为我知道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字段。
解决方案?
有更好的解决方案吗?这一次,对于这一个请求,我想在我的Angular资源中使用async = false ....
答案 0 :(得分:0)
我去的解决方案(完美无缺)是在异步请求之前设置$http.defaults.headers.common['Authorization'] = 'Token ' + old_api_token;
。然后在异步请求完成时覆盖它(如果已经更改)。