Angular $resource factory 不会添加 Auth 令牌 header
Angular $resource factory wont add Auth token header
我有一个名为 currentUser 的 angular 工厂来保存用户登录我的应用程序时的信息(包括身份验证令牌)。这个工厂被注入到很多控制器中,在这些情况下,我在使用 currentUser.getProfile().token 时没有问题。
我还有其他各种工厂,每个工厂 return 一个 $resource object 用于进行 API 调用。在这些工厂中,我注入了 currentUser,这样我就可以获得要添加到请求中的身份验证令牌 headers。这是这些工厂之一的简化示例:
angular
.module("common.services")
.factory("userAccount",
["$resource",
"appSettings",
"currentUser",
userAccount])
function userAccount($resource, appSettings, currentUser) {
return {
logout: $resource(appSettings.serverPath + "/api/Account/Logout", null,
{
'logoutUser': {
method: 'POST',
headers: {
'Authorization': 'Bearer ' + currentUser.getProfile().token
}
}
})
}
}
但是,currentUser.getProfile().token 始终为空,并且我收到未经授权的错误,即使当我将值记录到我的控制器中时它不是空的。可能是什么原因造成的?
编辑: 问题似乎不仅仅与 currentUser 工厂有关,因为当我将 currentUser.getProfile().token 替换为 localStorage.getItem('Token') 我好像遇到了同样的问题。控制器将正确记录本地存储的令牌,但不会将其添加到 API 请求中的 headers。
不完全是解决方法,但似乎有一些解决方法。
我选择使用的方法是将身份验证令牌添加为常见的 http header,如下所示:
$http.defaults.headers.common['Authorization'] = 'Bearer ' + data.access_token;
博客 post 在这里:
http://blog.brunoscopelliti.com/authentication-to-a-restful-web-service-in-an-angularjs-web-app/
如果有人知道我之前做错了什么,我仍然会感兴趣?
您需要 logout
成为 returns $resource
的函数。
您现在的方式是在服务初始化后立即调用 currentUser.getProfile()
,这可能在用户登录之前
function userAccount($resource, appSettings, currentUser) {
return {
logout: function() {
return $resource(appSettings.serverPath + "/api/Account/Logout", null, {
'logoutUser': {
method: 'POST',
headers: {
'Authorization': 'Bearer ' + currentUser.getProfile().token
}
}
})
}
}
}
现在,在您调用 userAccount.logout()
之前,不会进行获取令牌的调用
我有一个名为 currentUser 的 angular 工厂来保存用户登录我的应用程序时的信息(包括身份验证令牌)。这个工厂被注入到很多控制器中,在这些情况下,我在使用 currentUser.getProfile().token 时没有问题。
我还有其他各种工厂,每个工厂 return 一个 $resource object 用于进行 API 调用。在这些工厂中,我注入了 currentUser,这样我就可以获得要添加到请求中的身份验证令牌 headers。这是这些工厂之一的简化示例:
angular
.module("common.services")
.factory("userAccount",
["$resource",
"appSettings",
"currentUser",
userAccount])
function userAccount($resource, appSettings, currentUser) {
return {
logout: $resource(appSettings.serverPath + "/api/Account/Logout", null,
{
'logoutUser': {
method: 'POST',
headers: {
'Authorization': 'Bearer ' + currentUser.getProfile().token
}
}
})
}
}
但是,currentUser.getProfile().token 始终为空,并且我收到未经授权的错误,即使当我将值记录到我的控制器中时它不是空的。可能是什么原因造成的?
编辑: 问题似乎不仅仅与 currentUser 工厂有关,因为当我将 currentUser.getProfile().token 替换为 localStorage.getItem('Token') 我好像遇到了同样的问题。控制器将正确记录本地存储的令牌,但不会将其添加到 API 请求中的 headers。
不完全是解决方法,但似乎有一些解决方法。 我选择使用的方法是将身份验证令牌添加为常见的 http header,如下所示:
$http.defaults.headers.common['Authorization'] = 'Bearer ' + data.access_token;
博客 post 在这里: http://blog.brunoscopelliti.com/authentication-to-a-restful-web-service-in-an-angularjs-web-app/
如果有人知道我之前做错了什么,我仍然会感兴趣?
您需要 logout
成为 returns $resource
的函数。
您现在的方式是在服务初始化后立即调用 currentUser.getProfile()
,这可能在用户登录之前
function userAccount($resource, appSettings, currentUser) {
return {
logout: function() {
return $resource(appSettings.serverPath + "/api/Account/Logout", null, {
'logoutUser': {
method: 'POST',
headers: {
'Authorization': 'Bearer ' + currentUser.getProfile().token
}
}
})
}
}
}
现在,在您调用 userAccount.logout()