删除某些 http 调用的授权 Header Angular
Remove Authorization Header for some http calls Angular
我是 angular 的新手,正在尝试设置 HTTP 授权 Headers。截至目前,如果令牌有效,我可以为所有 API 设置授权 header。我想要的是仅在令牌可用时为某些 API 设置 header。
app.module.ts
@NgModule({
declarations: [AppComponent],
imports: [
HttpClientModule
],
providers: [
{ provide: HTTP_INTERCEPTORS, useClass: JwtInterceptor, multi: true },
]
})
jwt.interceptor.ts
import { HttpEvent, HttpHandler, HttpInterceptor, HttpRequest } from '@angular/common/http';
import { AuthenticationService } from '@/_services';
import { Injectable } from '@angular/core';
import { Observable } from 'rxjs';
@Injectable()
export class JwtInterceptor implements HttpInterceptor {
constructor(private authenticationService: AuthenticationService) {}
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
// add authorization header with jwt token if available
const currentUser = this.authenticationService.currentUserValue;
if (currentUser && currentUser.token) {
request = request.clone({
setHeaders: {
Authorization: `Bearer ${currentUser.token}`
}
});
}
return next.handle(request);
}
}
home-http.service.ts
import { HttpClient } from '@angular/common/http';
import { Injectable } from '@angular/core';
import { Observable } from 'rxjs';
import { map } from 'rxjs/operators';
@Injectable()
export class HomeHttpService {
constructor(private http: HttpClient) { }
getAll(url: string, paramsVal?: any): Observable<any[]> {
const options = {params: paramsVal};
return this.http.get<any[]>(url, options);
}
public getByID(url: string, id: number | string): Observable<any> {
return this.http.get<any>(`${url}/${id}`);
}
public delete(url: string): Observable<any> {
return this.http.delete<any>(url).pipe(
map(response => {
return response;
})
);
}
public post(data = [], url: string): Observable<any> {
return this.http.post<any>(url, data);
}
public getExternal(url: string): Observable<any> {
return this.http.get<any>(url);
}
public put(data: any, url: string): Observable<any> {
return this.http.put<any>(url, data);
}
}
家.service.ts
import { Injectable } from '@angular/core';
import { HomeHttpService } from '../home-http.service';
import { Observable } from 'rxjs';
@Injectable()
export class HomePageService {
constructor(private apiservice: HomeHttpService) {}
private basePath = `${url}`;
getAlldata(data): Observable<any> {
return this.apiservice.getAll(this.basePath, data);
}
我如何设置我的代码,以便我可以为某些 API 删除对某些 API 的授权 header
您可以使用request.url
属性 来过滤您需要的内容。
最简单的方法之一:
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
// add authorization header with jwt token if available
const currentUser = this.authenticationService.currentUserValue;
if (request.url.indexOf('some APIs path') === 0 && currentUser && currentUser.token) {
request = request.clone({
setHeaders: {
Authorization: `Bearer ${currentUser.token}`
}
});
}
return next.handle(request);
}
更准确的说,你可以看看下面的例子
import { HttpEvent, HttpHandler, HttpInterceptor, HttpRequest } from '@angular/common/http';
import { AuthenticationService } from '@/_services';
import { Injectable } from '@angular/core';
import { Observable } from 'rxjs';
@Injectable()
export class JwtInterceptor implements HttpInterceptor {
constructor(private authenticationService: AuthenticationService) {}
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
// add authorization header with jwt token if available
const currentUser = this.authenticationService.currentUserValue;
if (this.isHeaderNeeded() &¤tUser && currentUser.token) {
request = request.clone({
setHeaders: {
Authorization: `Bearer ${currentUser.token}`
}
});
}
return next.handle(request);
}
}
isHeaderNeeded(url: string) {
if (url === "other.api.com") { // this condition is up to you, it could be an exact match or how ever you like
return false;
} else {
return true;
}
}
在那些服务文件中使用这种方式
import {HttpBackend, HttpClient} from "@angular/common/http";
constructor(private http: HttpClient, handler: HttpBackend ) {
this.http = new HttpClient(handler);
}
我是 angular 的新手,正在尝试设置 HTTP 授权 Headers。截至目前,如果令牌有效,我可以为所有 API 设置授权 header。我想要的是仅在令牌可用时为某些 API 设置 header。
app.module.ts
@NgModule({
declarations: [AppComponent],
imports: [
HttpClientModule
],
providers: [
{ provide: HTTP_INTERCEPTORS, useClass: JwtInterceptor, multi: true },
]
})
jwt.interceptor.ts
import { HttpEvent, HttpHandler, HttpInterceptor, HttpRequest } from '@angular/common/http';
import { AuthenticationService } from '@/_services';
import { Injectable } from '@angular/core';
import { Observable } from 'rxjs';
@Injectable()
export class JwtInterceptor implements HttpInterceptor {
constructor(private authenticationService: AuthenticationService) {}
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
// add authorization header with jwt token if available
const currentUser = this.authenticationService.currentUserValue;
if (currentUser && currentUser.token) {
request = request.clone({
setHeaders: {
Authorization: `Bearer ${currentUser.token}`
}
});
}
return next.handle(request);
}
}
home-http.service.ts
import { HttpClient } from '@angular/common/http';
import { Injectable } from '@angular/core';
import { Observable } from 'rxjs';
import { map } from 'rxjs/operators';
@Injectable()
export class HomeHttpService {
constructor(private http: HttpClient) { }
getAll(url: string, paramsVal?: any): Observable<any[]> {
const options = {params: paramsVal};
return this.http.get<any[]>(url, options);
}
public getByID(url: string, id: number | string): Observable<any> {
return this.http.get<any>(`${url}/${id}`);
}
public delete(url: string): Observable<any> {
return this.http.delete<any>(url).pipe(
map(response => {
return response;
})
);
}
public post(data = [], url: string): Observable<any> {
return this.http.post<any>(url, data);
}
public getExternal(url: string): Observable<any> {
return this.http.get<any>(url);
}
public put(data: any, url: string): Observable<any> {
return this.http.put<any>(url, data);
}
}
家.service.ts
import { Injectable } from '@angular/core';
import { HomeHttpService } from '../home-http.service';
import { Observable } from 'rxjs';
@Injectable()
export class HomePageService {
constructor(private apiservice: HomeHttpService) {}
private basePath = `${url}`;
getAlldata(data): Observable<any> {
return this.apiservice.getAll(this.basePath, data);
}
我如何设置我的代码,以便我可以为某些 API 删除对某些 API 的授权 header
您可以使用request.url
属性 来过滤您需要的内容。
最简单的方法之一:
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
// add authorization header with jwt token if available
const currentUser = this.authenticationService.currentUserValue;
if (request.url.indexOf('some APIs path') === 0 && currentUser && currentUser.token) {
request = request.clone({
setHeaders: {
Authorization: `Bearer ${currentUser.token}`
}
});
}
return next.handle(request);
}
更准确的说,你可以看看下面的例子
import { HttpEvent, HttpHandler, HttpInterceptor, HttpRequest } from '@angular/common/http';
import { AuthenticationService } from '@/_services';
import { Injectable } from '@angular/core';
import { Observable } from 'rxjs';
@Injectable()
export class JwtInterceptor implements HttpInterceptor {
constructor(private authenticationService: AuthenticationService) {}
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
// add authorization header with jwt token if available
const currentUser = this.authenticationService.currentUserValue;
if (this.isHeaderNeeded() &¤tUser && currentUser.token) {
request = request.clone({
setHeaders: {
Authorization: `Bearer ${currentUser.token}`
}
});
}
return next.handle(request);
}
}
isHeaderNeeded(url: string) {
if (url === "other.api.com") { // this condition is up to you, it could be an exact match or how ever you like
return false;
} else {
return true;
}
}
在那些服务文件中使用这种方式
import {HttpBackend, HttpClient} from "@angular/common/http";
constructor(private http: HttpClient, handler: HttpBackend ) {
this.http = new HttpClient(handler);
}