Adonis JS и угловой 6 CSRF
Я создаю 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);
}
}
И я не знаю, перехватят ли Angular Http. потому что из моего запроса я не вижу никакого заголовка X-XSRF-TOKEN.
И я до сих пор путаюсь в использовании токенов Adonisjs. потому что, когда я вхожу и console.log(request.csrfToken)
Я получил значение, но значение отличается от токена в базе данных (я использую mongoDB).
Должен ли я получить csrf с самого начала, чтобы открыть свое приложение? или что-то другое?
Пожалуйста, предложите мне, как это исправить.