Angularjs Angular$资源工厂不会添加身份验证令牌头

Angularjs Angular$资源工厂不会添加身份验证令牌头,angularjs,authentication,dependency-injection,resources,factory,Angularjs,Authentication,Dependency Injection,Resources,Factory,我有一个名为currentUser的angular工厂,用于在用户登录到我的应用程序(包括身份验证令牌)时保存用户信息。这个工厂被注入到许多控制器中,在这些情况下,我在使用currentUser.getProfile()令牌时没有任何问题 我还有其他各种工厂,每个工厂都返回一个$resource对象以进行API调用。在这些工厂中,我注入currentUser,以便获得要添加到请求头中的auth令牌。以下是其中一家工厂的简化示例: angular .module("common.servi

我有一个名为currentUser的angular工厂,用于在用户登录到我的应用程序(包括身份验证令牌)时保存用户信息。这个工厂被注入到许多控制器中,在这些情况下,我在使用currentUser.getProfile()令牌时没有任何问题

我还有其他各种工厂,每个工厂都返回一个$resource对象以进行API调用。在这些工厂中,我注入currentUser,以便获得要添加到请求头中的auth令牌。以下是其中一家工厂的简化示例:

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工厂,当我用localStorage.getItem('token')替换currentUser.getProfile().token时,我似乎也遇到了同样的问题。控制器将正确地记录本地存储的令牌,但不会将其添加到API请求的头中。

不完全是修复方法,但似乎有一些解决方法。 我选择使用的方法是将auth令牌添加为公共http头,如下所示:

$http.defaults.headers.common['Authorization'] = 'Bearer ' + data.access_token;
关于它的博客帖子如下:


不过,如果有人知道我以前做错了什么,我还是会感兴趣的。

这不完全是一个解决办法,但似乎有一些解决办法。 我选择使用的方法是将auth令牌添加为公共http头,如下所示:

$http.defaults.headers.common['Authorization'] = 'Bearer ' + data.access_token;
关于它的博客帖子如下:


如果有人知道我以前做错了什么,我仍然会感兴趣。

您需要
注销
才能成为返回
$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()

才能调用获取令牌。您需要
logout
作为返回
$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()