1.拦截器收集 api/http-interceptor.ts
/**
* 拦截器 收集
* barrel
*/
import { HTTP_INTERCEPTORS } from '@angular/common/http';
import { InterceptorService } from '../sevices/app.intercept';
export const httpInterceptorProviders = [
{ provide: HTTP_INTERCEPTORS, useClass: InterceptorService, multi: true },
];
2.service/app.intercept.ts
/**
* 拦截器验证token
*/
import { Injectable } from '@angular/core';
import { HttpInterceptor, HttpHandler, HttpRequest, HttpEvent, } from '@angular/common/http';
import { Router } from '@angular/router';
import { Observable, } from 'rxjs';
import { apiList } from '../api/app.api'
import { Storage } from '@ionic/storage';
import { NavController } from '@ionic/angular';
@Injectable()
export class InterceptorService implements HttpInterceptor {
constructor(public router: Router, public api: apiList,
public storage: Storage,
public nav: NavController,
) {
};
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
let authReq: any;
// 实现第一次不拦截的方式:1. 指定接口不拦截 2. 判断本地localStorage
let loginUrl = this.api.baseurl + this.api.loginList['getCode'];
if (req.url !== loginUrl) {
if (localStorage.getItem('access_token')) {
const token = localStorage.getItem('access_token');
let param = req.params.set('access_token', token);
authReq = req.clone({ params: param, setHeaders: {} });
return next.handle(authReq);
} else {
// 未登录 == access_token
this.nav.navigateRoot(['/login']);
}
}
authReq = req.clone({ setHeaders: {} });
return next.handle(authReq);
}
}
3.app.module.ts引入
// 拦截器
import { httpInterceptorProviders } from './api/http-interceptors';
providers: [
httpInterceptorProviders
]