http请求拦截器

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
]

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值