bixi
Version:
企业级中后台前端解决方案
57 lines (54 loc) • 1.82 kB
text/typescript
import { HttpRequest } from '@angular/common/http';
import { Injectable } from '@angular/core';
import { BixiAuthConfig } from '../../config.type';
import { BaseInterceptor } from '../base.interceptor';
import { CheckSimple } from '../helper';
import { BIXI_SERVICE_TOKEN } from '../interface';
import { SimpleTokenModel } from './simple.model';
/**
* Simple 拦截器
*
* ```
* // app.module.ts
* { provide: HTTP_INTERCEPTORS, useClass: SimpleInterceptor, multi: true}
* ```
*/
()
export class SimpleInterceptor extends BaseInterceptor {
isAuth(_options: BixiAuthConfig): boolean {
this.model = this.injector.get(BIXI_SERVICE_TOKEN).get() as SimpleTokenModel;
return CheckSimple(this.model as SimpleTokenModel);
}
// tslint:disable-next-line:no-any
setReq(req: HttpRequest<any>, options: BixiAuthConfig): HttpRequest<any> {
const { token_send_template, token_send_key } = options;
// tslint:disable-next-line:no-non-null-assertion
const token = token_send_template!.replace(/\$\{([\w]+)\}/g, (_: string, g) => this.model[g]);
switch (options.token_send_place) {
case 'header':
// tslint:disable-next-line:no-any
const obj: any = {};
// tslint:disable-next-line:no-non-null-assertion
obj[token_send_key!] = token;
req = req.clone({
setHeaders: obj
});
break;
case 'body':
const body = req.body || {};
// tslint:disable-next-line:no-non-null-assertion
body[token_send_key!] = token;
req = req.clone({
body
});
break;
case 'url':
req = req.clone({
// tslint:disable-next-line:no-non-null-assertion
params: req.params.append(token_send_key!, token)
});
break;
}
return req;
}
}