我正在使用JWT进行授权。在AngularJS 1.x中,我使用以下函数登录:
function login(username, password) {
var deferred = $q.defer();
$http.post("/api/login", {
"username": username,
"password": password
}).then(function(response) {
if (response.data && response.data.token) {
var tokenBegin = response.data.token.substring(0,6);
var bearer = (tokenBegin === 'Bearer') ? '' : 'Bearer ';
$http.defaults.headers.common.Authorization = bearer + response.data.token;
deferred.resolve({ status: true, message: 'Login complete' });
} else {
deferred.reject(response);
}
}, function(reason) {
deferred.reject(reason)
});
return deferred.promise;
}即修改$http.defaults对象。在Angular2和TypeScript方面,我有点不知所措,因为Http类似乎没有defaults对象。我该怎么做?
发布于 2016-07-04 09:39:29
有几种方法可以做到这一点:
BaseRequestOptions类:
从‘@ BaseRequestOptions /http’导入{BaseRequestOptions、RequestOptions、RequestOptionsArgs};导出类AppRequestOptions扩展BaseRequestOptions{构造函数{}{ options.url = 'https://www.test.org‘+ options.url;返回super.merge(选项);}}
我以这样的方式注册:
引导(App,HTTP_PROVIDERS,provide(RequestOptions,{useClass: AppRequestOptions}) );Http (或XHRBackend)类本身:
@Injectable()导出类CustomHttp扩展Http {构造函数(后端: ConnectionBackend,defaultOptions: RequestOptions) {Super(后端,defaultOptions);}请求(url: string请求,options?:RequestOptionsArgs):可观察的{console.log(‘Request .’);返回super.request(url,options).catch(res => { // do });} get(url: string,options?:RequestOptionsArgs):可观察的{console.log(‘get.’);返回super.get(url,options).catch(res => { // do });}
并按以下方式登记:
引导(AppComponent,[HTTP_PROVIDERS,新提供者(Http,{ useFactory:(后端: XHRBackend,defaultOptions: RequestOptions) => new CustomHttp(后端,defaultOptions),deps: XHRBackend,RequestOptions }) ]);见以下问题:
https://stackoverflow.com/questions/38181319
复制相似问题