angular中http请求验证token

  1. 普通方式
  1. 建立全局服务,把token放到Authorization中

 

/**
* @description 发送请求
*/
request = (type, params, url) => {
const token = localStorage.getItem('token');
return this.http.request(type, window.API_ROOT + url, {
headers: new HttpHeaders({
'Authorization': `Token ${token}`
}),
body: params
});
}

 

 

  1. 使用

 

/**
* @description 获取用户信息
*/
getUser() {
this.apiService.request('get', '', 'api/common/login_user').toPromise().then((res: any) => {
});
}

 

 

  1. 为了应对后端token过时问题,须要建立全局拦截器

①在app.module.ts的providers中引入拦截器文件npm

providers: [
{ provide: HTTP_INTERCEPTORS, useClass: InterceptorService, multi: true }
],

 

②建立全局拦截器服务InterceptorService后端

export class InterceptorService implements HttpInterceptor {

constructor(private router: Router) { }
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
return next.handle(req).pipe(catchError((err) => {
if (err.status === 401) {
this.router.navigate(['/login']);
}
return ErrorObservable.create(event);
}));
}
}

 

  1. jwt验证

 

  1. 安装jwt
npm install @auth0/angular-jwt

 

  1. 修改app.module.ts文件
export function tokenGetter() {

return localStorage.getItem('token');

}

 

在import中引入api

JwtModule.forRoot({

config: {

tokenGetter: tokenGetter,

whitelistedDomains: ['localhost:4200', 'test.backend.jclife.com'],

blacklistedRoutes: [],

throwNoTokenError: false

}

})

 

注意:域名必须得加入白名单中,不然http请求不会带上token,致使报错没有权限app

相关文章
相关标签/搜索