【发布时间】: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 字段..
解决方案?
- 有一个使用 jquery 的 async=false 请求?
- 获取所需数据后关闭登录框。登录框可能会闪烁...
- 在 cookie 中存储更多关于登录的元数据(即用户名),因此我们不必在应用加载时从服务器获取这些信息。
- ??
有没有更好的解决方案?这一次,对于这一个请求,我希望我的 Angular 资源中有 async=false ......
【问题讨论】:
标签: javascript authentication angularjs cookies