Javascript 将auth0令牌传递给$http.get(角度)
'我在获取auth0令牌以附加到http.get请求到期望看到该令牌的api时遇到一些问题。该令牌在用户登录时创建,并保存在浏览器本地存储中。那部分很好用。因此,它将令牌附加到我遇到问题的http.get 到目前为止,我有以下代码。在我的app.js中,我有以下内容Javascript 将auth0令牌传递给$http.get(角度),javascript,angularjs,auth0,Javascript,Angularjs,Auth0,'我在获取auth0令牌以附加到http.get请求到期望看到该令牌的api时遇到一些问题。该令牌在用户登录时创建,并保存在浏览器本地存储中。那部分很好用。因此,它将令牌附加到我遇到问题的http.get 到目前为止,我有以下代码。在我的app.js中,我有以下内容 var QuoteApp = angular.module('QuoteApp', ['ui.router', 'auth0', 'angular-jwt', 'angular-storage', 'ngCookies']); pr
var QuoteApp = angular.module('QuoteApp', ['ui.router', 'auth0', 'angular-jwt', 'angular-storage', 'ngCookies']);
priceQuoteApp.config(function ($stateProvider, $urlRouterProvider, $httpProvider, authProvider, $locationProvider, jwtInterceptorProvider) {
jwtInterceptorProvider.tokenGetter = function(store, jwtHelper, auth) {
var idToken = store.get('token');
var refreshToken = store.get('refreshToken');
// If no token return null
if (!idToken || !refreshToken) {
return null;
}
}
$httpProvider.interceptors.push('jwtInterceptor');
});
然后我有一个$http.get函数,我向api发送一个请求,该请求也需要一个令牌
在我的api.service.js文件中,我有一个
this.getStuff = function (attributes) {
return $http.get('http://www.theurl.com/api/getstuff?json=' + JSON.stringify(attributes)).
success(function(){
});
};
我从我的getStuff.js文件中调用getStuff函数,如下所示
$scope.getTheStuff = function (){
Services.getStuff($scope.Attributes)
.then(function (res) {
})
};
因此,我从服务器401(未经授权)收到一个身份验证错误,这对我来说意味着令牌由于某种原因没有附加到http.het请求。你知道为什么会这样吗
我还包括了来自浏览器控制台的标题,如果这有帮助的话
Remote Address:10.34.51.34:80
Request URL:http://www.theurl.com/api/getstuff?json={stuff in here}]}
Request Method:GET
Status Code:401 Unauthorized
Accept:application/json, text/plain, */*
Accept-Encoding:gzip, deflate, sdch
Host:http://www.theurl.com
Origin:http://localhost:63342
Referer:http://localhost:63342/price-tool-ui-1/app/index.html
User-Agent:Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.115 Safari/537.36
Query String Parametersview sourceview URL encoded
json:{stuff in here}]}
Access-Control-Allow-Methods:GET, POST, OPTIONS, PUT, DELETE
Access-Control-Allow-Origin:*
我不确定我是否正确理解了你的问题。但以下是我在验证后将http请求中的令牌设置为API的步骤:
$http.defaults.headers.common['token'] = token;
标头的名称取决于API预期的内容(可能是X-Auth、令牌、X-Token…。我不确定是否正确理解了您的问题。但以下是我在验证后将http请求中的令牌设置为API的步骤:
$http.defaults.headers.common['token'] = token;
标头的名称取决于API所期望的内容(可能是X-Auth、令牌、X-Token…。您没有在
jwtInterceptorProvider.tokenGetter
中返回令牌。从
您没有在
jwtInterceptorProvider.tokenGetter
中返回令牌。从
您没有返回从localStorage获得的令牌 @eer响应非常好,但他仍然需要保存新刷新的令牌,以便下次不必再次调用该端点 代码如下所示:
var refreshingToken = null;
jwtInterceptorProvider.tokenGetter = function(store, $http, jwtHelper) {
var token = store.get('token');
var refreshToken = store.get('refreshToken');
if (token) {
if (!jwtHelper.isTokenExpired(token)) {
return store.get('token');
} else {
if (refreshingToken === null) {
refreshingToken = auth.refreshIdToken(refreshToken).then(function(idToken) {
store.set('token', idToken);
return idToken;
}).finally(function() {
refreshingToken = null;
});
}
return refreshingToken;
}
}
}
希望有帮助
更多关于
谢谢 您没有返回从localStorage获得的令牌 @eer响应非常好,但他仍然需要保存新刷新的令牌,以便下次不必再次调用该端点 代码如下所示:
var refreshingToken = null;
jwtInterceptorProvider.tokenGetter = function(store, $http, jwtHelper) {
var token = store.get('token');
var refreshToken = store.get('refreshToken');
if (token) {
if (!jwtHelper.isTokenExpired(token)) {
return store.get('token');
} else {
if (refreshingToken === null) {
refreshingToken = auth.refreshIdToken(refreshToken).then(function(idToken) {
store.set('token', idToken);
return idToken;
}).finally(function() {
refreshingToken = null;
});
}
return refreshingToken;
}
}
}
希望有帮助
更多关于
谢谢 你确定这就是你问题的描述吗?谢谢你的回答。我不知道这是个问题。看起来确实有点长,但我想我应该尽可能多地提供信息。没问题。尝试编辑您的帖子-如果它符合我链接的帮助中的规则,则有更多的机会获得您的答案。好的,谢谢-它已被编辑您确定这是您问题的描述吗?谢谢您的回答。我不知道这是个问题。看起来确实有点长,但我想我应该尽可能多地提供信息。没问题。试着编辑你的帖子-如果它符合我链接的帮助中的规则,那么就有更多的机会得到你的答案。好的,谢谢-已经编辑过了