我有角13应用程序和后端使用红宝石rails。根据角度文档https://angular.io/api/common/http/HttpClientXsrfModule#description,我应该能够简单地使用HttpClientXsrfModule来保护XSRF。它为cookieName和headerName设置了可选的设置。问题是在我的例子中没有CSRF cookie,令牌存储在页面标题元标记中。这就是为什么我认为不可能像文档所说的那样使用HttpClientXsrfModule。
相反,我将实现一个自定义拦截器,但是我不知道如何在角自定义拦截器中获得元标记值。https://angular.io/guide/http#intercepting-requests-and-responses
请告知如何在角拦截器中获得页眉元标记值:
import { Injectable } from '@angular/core';
import {
HttpEvent, HttpInterceptor, HttpHandler, HttpRequest
} from '@angular/common/http';
import { Observable } from 'rxjs';
@Injectable()
export class NoopInterceptor implements HttpInterceptor {
intercept(req: HttpRequest<any>, next: HttpHandler):
Observable<HttpEvent<any>> {
req = req.clone({
setHeaders: { 'X-CSRF-TOKEN': ...how to get it... }
});
return next.handle(req);
}
}
发布于 2021-12-09 04:43:42
Angular提供元数据服务,使用它我们可以检索元元素。
import { Meta } from '@angular/platform-browser';
import { Injectable } from '@angular/core';
import {
HttpEvent, HttpInterceptor, HttpHandler, HttpRequest
} from '@angular/common/http';
import { Observable } from 'rxjs';
@Injectable()
export class NoopInterceptor implements HttpInterceptor {
constructor(private meta:Meta){
console.log(this.meta.getTag('name="csrf-token"').content);
}
intercept(req: HttpRequest<any>, next: HttpHandler):
Observable<HttpEvent<any>> {
req = req.clone({
setHeaders: { 'X-CSRF-TOKEN': this.meta.getTag('name="csrf-token"').content }
});
return next.handle(req);
}
}
https://stackoverflow.com/questions/70283878
复制相似问题