0

Angular 新手,但我正在学习。我的目标是:我有一个登录视图,它将用户对象传递给我们的 API,API 会根据用户数据库检查它,并使用用户名和密码的 Base64 转换进行响应。如果用户通过 Authorization : Base ... 作为标题,我还设置了一个返回一些简单 JSON 的页面,他们将接收数据。如果不是,它会响应 401,然后我设置一个全局 401 处理程序以路由回“/login”。

我的问题是,在我的 LoginService 中,我收到了 Base64 密钥,我可以提醒它以表明我收到了它。但是,如果我将此服务作为标头注入到我的 json 页面中,我会得到一个“未定义”。

$http.get('http://myURL/api/project', { headers: {"Authorization": "Basic " +    userLoginService.myData}})

所以我想做的基本事情是将数据从一个 SERVICE 传递到另一个 SERVICE,我已经看到如何从一个 CONTROLLER 到另一个 CONTROLLER 执行此操作,但是我不确定在这里做什么。任何示例代码显然都很棒。提前非常感谢。

4

2 回答 2

0

所以,到目前为止我所做的:当我从我的 API 获得响应时,我将其设置为 cookie。在我用来获取一些 JSON 的服务中,我在标题中设置了 cookie,如下所示

var token = "";
token = $cookieStore.get('token');
 $http({method: "GET", url:"http://example.com/api/project", headers:{'Authorization' : 'Basic ' + token}})

但是,当我以这种方式设置标题时,我的应用程序甚至不会运行 GET。相反在萤火控制台我看到

Object { transformRequest=[1], transformResponse=[1], method="GET", more...}

当我单击它时,我可以看到正在设置标题,但应用程序不执行 GET 操作,如此接近但如此遥远。有任何想法吗?

于 2013-07-22T16:40:42.857 回答
0

我不确定您是否可以在不将数据作为参数传递给方法或构造函数的情况下将数据从一个服务共享到另一个服务。例如

//inside of a service
this.makeAPIcall = function(token){
    $http.get('http://...', {headers: {'Authorization': 'Basic ' + token}});
}

但是您可能希望为将来的 http 请求存储身份验证密钥,并且最好以一种不需要您在每次需要发出请求时都要求身份验证的方式存储此密钥。我建议您将令牌存储在浏览器的本地存储中或作为 cookie 存储,以便您可以通过用户登录的期限检索令牌。



附带说明一下,如果您发现每次进行 API 调用时都必须传递 Authorization 标头,您可能需要在模块本身上配置您的 $httpProvider(此示例假设您正在使用 LocalStorange 和你有一个 authKey 存储在你的 LocalStorage 中:

angular.module('myApp', []).run(function($http, LocalStorageFactory){
    $http.defaults.headers.common['Authorization'] = 'Basic ' + LocalStorageFactory.get('authKey');
});
于 2013-07-19T13:10:41.980 回答