Adonis JS и угловой 6 CSRF - PullRequest
       13

Adonis JS и угловой 6 CSRF

0 голосов
/ 12 ноября 2018

Я создаю SPA, используя Angular 6 для внешнего интерфейса и Adonisjs для внутреннего.

А теперь я застрял в проблеме csrf. Если я отключу csrf в adonis / config / shield.js, я выполню свою задачу. Но я не хочу отключать csrf.

Я следовал некоторым советам в Интернете об использовании Angular HttpInterceptor, но все еще не работает.

вот конфиг csrf в shield.js

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

А вот мой токен-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);

  }
}

И я не знаю, перехитрил ли Ангуляр Http. потому что из моего запроса я не вижу никакого заголовка X-XSRF-TOKEN.

И я до сих пор путаюсь с использованием токенов, которые использует Adonisjs. потому что когда я вхожу в систему и console.log(request.csrfToken) я получаю значение, но оно отличается от токена в базе данных (я использую mongoDB).

Должен ли я получить csrf с самого начала, чтобы открыть свое приложение? или что-то еще?

Подскажите пожалуйста, как это исправить.

...