在调用另一个资源后向所有资源广播 headers
Broadcast headers to all resources after calling another one resource
我休息了api,现在是时候用angular处理数据了。为此,我构建了一个服务来连接我的资源。
所以我:
angular.module("myServiceRest", ['ngResource'])
.factory("myService", function ($rootScope, $resource) {
var apiData = $resource(
"/api", {},
{
"getContains": {method: 'GET', isArray: false, url: "/api/users/:userid/:yearid/:groupeid/:levelid", headers: $rootScope.headers},
"getContain": {method: 'GET', isArray: false, url: "/api/Contains/:containid", headers: $rootScope.headers},
"postAuthTokens": {method: 'POST', url: "/api/auth-tokens"}
});
return {
getGroupesContenus: function (user_id, year_id, groupe_id, level_id) {
return apiData.getContains({userid: user_id, yearid: year_id, groupeid: groupe_id, levelid: level_id});
},
getContain: function (contain_id) {
return apiData.getContain({containid: contain_id});
},
postAuthTokens: function(userData) {
apiData.postAuthTokens(userData, function (data) {
console.log("success !");
$rootScope.headers = {
"Content-Type": "application/json",
"Authorization": "Basic ZWRnYXJrYW1kZW06TkVXVE9O",
"Accept": "application/json",
"X-Auth-Token": data.value
};
}, function (error) {
console.log(error.data);
})
}
}
});
这里我有 3 个资源:
- getContains: /api/users/:userid/:yearid/:groupeid/:levelid
- getContain: /api/Contains/:containid
- postAuthTokens:/api/auth-tokens
要访问 getContains 和 getContain(登录后),用户需要设置通过 postAuthTokens 检索的令牌 (X-Auth-Token)。
基本上,当用户登录时,他调用 POST 资源 postAuthTokens,并通过 data.value 检索他的令牌(存储在数据库中),并且必须设置X-Auth-Token 中的那个标记以便继续。
为此,我创建了一个 $rootScope,当用户登录时,我立即设置:
$rootScope.headers = {
"Content-Type": "application/json",
"Authorization": "Basic ZWRnYXJrYW1kZW06TkVXVE9O",
"Accept": "application/json",
"X-Auth-Token": data.value //Set the user token
};
但是根本不起作用。这就像 $rootScope.headers 在调用 post Auth Tokens 后重新初始化,因为当用户登录后我在 Chrome 控制台中收到此错误:
angular.js:14328 Possibly unhandled rejection: {"data":{"error":{"code":500,"message":"Internal Server Error","exception":[{"message":"X-Auth-Token header is required","class":"Symfony\Component\Security\Core\Exception\BadCredentialsException","trace":...
我的 $rootScope.headers 根本没有设置。
那么如何在调用 postAuthTokens 后将我的 $rootScope.headers 广播到所有资源 headers ?
不是将 headers 添加到根范围,而是将它们添加到 $http
服务:
$http.defaults.headers.common['X-Auth-Token'] = data.value
然后应将它们自动添加到所有后续 HTTP 请求中
我休息了api,现在是时候用angular处理数据了。为此,我构建了一个服务来连接我的资源。
所以我:
angular.module("myServiceRest", ['ngResource'])
.factory("myService", function ($rootScope, $resource) {
var apiData = $resource(
"/api", {},
{
"getContains": {method: 'GET', isArray: false, url: "/api/users/:userid/:yearid/:groupeid/:levelid", headers: $rootScope.headers},
"getContain": {method: 'GET', isArray: false, url: "/api/Contains/:containid", headers: $rootScope.headers},
"postAuthTokens": {method: 'POST', url: "/api/auth-tokens"}
});
return {
getGroupesContenus: function (user_id, year_id, groupe_id, level_id) {
return apiData.getContains({userid: user_id, yearid: year_id, groupeid: groupe_id, levelid: level_id});
},
getContain: function (contain_id) {
return apiData.getContain({containid: contain_id});
},
postAuthTokens: function(userData) {
apiData.postAuthTokens(userData, function (data) {
console.log("success !");
$rootScope.headers = {
"Content-Type": "application/json",
"Authorization": "Basic ZWRnYXJrYW1kZW06TkVXVE9O",
"Accept": "application/json",
"X-Auth-Token": data.value
};
}, function (error) {
console.log(error.data);
})
}
}
});
这里我有 3 个资源:
- getContains: /api/users/:userid/:yearid/:groupeid/:levelid
- getContain: /api/Contains/:containid
- postAuthTokens:/api/auth-tokens
要访问 getContains 和 getContain(登录后),用户需要设置通过 postAuthTokens 检索的令牌 (X-Auth-Token)。
基本上,当用户登录时,他调用 POST 资源 postAuthTokens,并通过 data.value 检索他的令牌(存储在数据库中),并且必须设置X-Auth-Token 中的那个标记以便继续。
为此,我创建了一个 $rootScope,当用户登录时,我立即设置:
$rootScope.headers = {
"Content-Type": "application/json",
"Authorization": "Basic ZWRnYXJrYW1kZW06TkVXVE9O",
"Accept": "application/json",
"X-Auth-Token": data.value //Set the user token
};
但是根本不起作用。这就像 $rootScope.headers 在调用 post Auth Tokens 后重新初始化,因为当用户登录后我在 Chrome 控制台中收到此错误:
angular.js:14328 Possibly unhandled rejection: {"data":{"error":{"code":500,"message":"Internal Server Error","exception":[{"message":"X-Auth-Token header is required","class":"Symfony\Component\Security\Core\Exception\BadCredentialsException","trace":...
我的 $rootScope.headers 根本没有设置。
那么如何在调用 postAuthTokens 后将我的 $rootScope.headers 广播到所有资源 headers ?
不是将 headers 添加到根范围,而是将它们添加到 $http
服务:
$http.defaults.headers.common['X-Auth-Token'] = data.value
然后应将它们自动添加到所有后续 HTTP 请求中