В документации angular указано, что angular httpclient
автоматически отправит значение cookie XSRF-TOKEN
в заголовке X-XSRF-TOKEN
почтового запроса. Ссылка документации
Но он не отправляет мне заголовок. Вот мой код
Код Nodejs для установки файла cookie
router.get('/set-csrf',function(req,res,next){
res.setHeader('Set-Cookie', "XSRF-TOKEN=abc;Path=/; HttpOnly; SameSite=Strict");
res.send();
})
Я использовал httpclient в app.module.ts
imports: [
HttpClientModule
]
** Вышеприведенный код предназначен только для целей отладки. У меня нет конечной точки set-csrf.
Но при отправке почтового запроса он не отправляет заголовок. Я не могу отлаживать.
Я добавил проблему в репозиторий github angular тоже. HttpXsrfInterceptor проверяет, является ли запрос GET или HEAD, или если он начинается с http. Если true, он пропускает добавление заголовка.
Вот код в класс HttpXsrfInterceptor
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
const lcUrl = req.url.toLowerCase();
// Skip both non-mutating requests and absolute URLs.
// Non-mutating requests don't require a token, and absolute URLs require special handling
// anyway as the cookie set
// on our origin is not the same as the token expected by another origin.
if (req.method === 'GET' || req.method === 'HEAD' || lcUrl.startsWith('http://') ||
lcUrl.startsWith('https://')) {
return next.handle(req);
}
const token = this.tokenService.getToken();
// Be careful not to overwrite an existing header of the same name.
if (token !== null && !req.headers.has(this.headerName)) {
req = req.clone({headers: req.headers.set(this.headerName, token)});
}
return next.handle(req);
}
Я не уверен, почему они пропустили часть http/s. Вот моя проблема в github