【问题标题】:Angular $resource factory wont add Auth token headerAngular $resource 工厂不会添加 Auth 令牌标头
【发布时间】:2016-07-20 10:56:12
【问题描述】:

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

我还有各种其他工厂,它们每个都返回一个 $resource 对象来进行 API 调用。在这些工厂中,我注入 currentUser 以便我可以获取身份验证令牌以添加到请求标头中。以下是这些工厂之一的简化​​示例:

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 请求的标头中。

【问题讨论】:

    标签: angularjs authentication dependency-injection resources factory


    【解决方案1】:

    您需要 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() 之前,不会进行获取令牌的调用

    【讨论】:

      【解决方案2】:

      不完全是一个修复,但似乎有一些解决方法。 我选择使用的一个是将身份验证令牌添加为常见的 http 标头,如下所示:

      $http.defaults.headers.common['Authorization'] = 'Bearer ' + data.access_token;
      

      关于它的博客文章在这里: http://blog.brunoscopelliti.com/authentication-to-a-restful-web-service-in-an-angularjs-web-app/

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-12-29
        • 1970-01-01
        • 2019-02-27
        • 2021-08-11
        • 2018-06-15
        相关资源
        最近更新 更多