首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >来自页面元标签的角13 CSRF令牌

来自页面元标签的角13 CSRF令牌
EN

Stack Overflow用户
提问于 2021-12-09 02:00:04
回答 1查看 337关注 0票数 1

我有角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

请告知如何在角拦截器中获得页眉元标记值:

代码语言:javascript
运行
复制
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);
  }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-12-09 04:43:42

Angular提供元数据服务,使用它我们可以检索元元素。

代码语言:javascript
运行
复制
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);
  }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70283878

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档