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()

之前,不会进行获取令牌的调用