阿多尼斯js和angular 6 csrf

时间:2018-11-12 06:59:24

标签: angular csrf adonis.js csrf-token

我正在使用前端的Angular 6和后端的Adonisjs创建SPA。

现在我陷入了问题csrf。如果在adonis / config / shield.js中禁用csrf,则我已经完成了任务。但是,我不想禁用csrf。

我已经在互联网上遵循了有关使用Angular HttpInterceptor的一些建议,但仍然无法正常工作。

这是shield.js中的csrf配置

csrf: {
enable: true,
methods: ['POST', 'PUT', 'DELETE'],
filterUris: ['/api/auth/signin'],
cookieOptions: {
  httpOnly: false,
  sameSite: true,
  path: '/',
  maxAge: 7200
}
// compareHostAndOrigin: true}

这是我的token-interceptor.service.ts

    import { Injectable } from '@angular/core';
import {
  HttpClientXsrfModule,
  HttpInterceptor,
  HttpXsrfTokenExtractor,
  HttpRequest,
  HttpHandler,
  HttpEvent
} from '@angular/common/http';
import { Observable } from 'rxjs';

@Injectable()
export class TokenInterceptorService implements HttpInterceptor {
  constructor(private tokenExtractor: HttpXsrfTokenExtractor) {}

  intercept(
    req: HttpRequest<any>,
    next: HttpHandler
  ): Observable<HttpEvent<any>> {
    const headerName = 'XSRF-TOKEN';
    const respHeaderName = 'X-XSRF-TOKEN';
    const token = this.tokenExtractor.getToken() as string;
    if (token !== null && !req.headers.has(headerName)) {
      req = req.clone({ headers: req.headers.set(respHeaderName, token) });
    }
    return next.handle(req);

  }
}

我不知道Angular是否拦截了Http。因为从我的请求中,我看不到任何X-XSRF-TOKEN标头。

我仍然对Adonisjs使用的令牌感到困惑。因为当我登录console.log(request.csrfToken)时得到了一个值,但该值与数据库中的令牌不同(我使用mongoDB)。

打开应用程序一开始我应该得到csrf吗? 还是其他?

请建议我如何解决。

0 个答案:

没有答案