GET x-Auth-Token via JavaScript/Angular/Ionic Promise

GET x-Auth-Token via JavaScript/Angular/Ionic Promise

本文关键字:Angular Promise Ionic JavaScript x-Auth-Token via GET      更新时间:2023-09-26

我有一个问题,不知道如何解决...我必须通过基于令牌的身份验证对IonicApp中的用户进行身份验证。所以我必须将令牌存储在应用程序中,这应该不是问题......问题是:如何获取令牌?这是我的代码:

    // Alle Aufrufe an die REST-Api werden hier durchgeführt
    var httpCall = {
        async : function(method, url, header, params, data) {
//          if (url != 'login') {
//              header['X-Auth-Token'] = userTokenFactory.getUserToken();
//          }
            //console.log(header['X-Auth-Token']);
            var ipurl = "IPURL";
            // $http returns a promise, which has a then function, which also returns a promise
            var promise = $http({
                method : method,
                url : ipurl + url,
                //headers : header,
                params : params,
                data : data,
                config : {
                    timeout : 5000
                }
            }).then(function successCallback(response) {
                //console.log("data:" + response.data);
                //console.log("header:" + response.headers);
                console.log("token:" + response.headers['X-AUTH-TOKEN']);
                //console.log(response.data.token);
                console.log("token" + repsonse.token);
                // TRY TO READ THE X_AUTH_TOKEN HERE !!!!!!!!!!!!
                return response;
            }, function errorCallback(response) {
                return response;
            });
            // Return the promise to the controller
            return promise;
        }
    };
    return httpCall;
});

这是来自服务器的响应图片(来自Firefox)。如您所见,X-Auth-Token就在那里...这是 X-身份验证令牌

感谢您的帮助!!

有很多

文章可以在AngularJS中处理身份验证。这篇文章非常适合您的情况。

因此,您可以从请求中获取令牌,因为,

}).then(function successCallback(response) {
    console.log("data:" + response.data);
    $window.sessionStorage.token = response.data.token;
    return response;
}, function errorCallback(response) {
    return response;
});

现在我们将令牌保存在会话存储中。此令牌可以通过至少三种方式与每个请求一起发回

1. 在每个请求中设置标头:

`$http({method: 'GET', url: url, headers: {
    'Authorization': 'Bearer ' + $window.sessionStorage.token}
});`

2. 设置默认标题

`$http.defaults.headers.common['X-Auth-Token'] = 'Bearer ' + $window.sessionStorage.token;`

3. 写Interceptor

拦截

器能够在请求之前拦截请求 交给服务器,并在移交给 启动这些请求的应用程序代码

myApp.factory('authInterceptor', function ($rootScope, $q, $window) {
  return {
    request: function (config) {
      config.headers = config.headers || {};
      if ($window.sessionStorage.token) {
        config.headers.Authorization = 'Bearer ' + $window.sessionStorage.token;
      }
      return config;
    },
    response: function (response) {
      if (response.status === 401) {
        // handle the case where the user is not authenticated
      }
      return response || $q.when(response);
    }
  };
});
myApp.config(function ($httpProvider) {
  $httpProvider.interceptors.push('authInterceptor');
});

有关详细说明,请参阅 AngularJS $http指南。

当您获得 response.data null 并且图像表明正在返回标头时,我建议您检查您是否正在获取数据

response.headers()

如果然后尝试使用response.headers()["X_AUTH_TOKEN"].