角度のある文書では、角度httpclient
は、投稿要求のヘッダーX-XSRF-TOKEN
にクッキーXSRF-TOKEN
の値を自動的に送信することが記載されています。 Documentation linkangular4 httpclient csrfはx-xsrf-tokenを送信しません
しかし、私のためにヘッダーを送信しません。ここではクッキー
router.get('/set-csrf',function(req,res,next){
res.setHeader('Set-Cookie', "XSRF-TOKEN=abc;Path=/; HttpOnly; SameSite=Strict");
res.send();
})
を設定する
Nodejsコードは、私がapp.module.tsでのHTTPClientを使用していた私のコードです
imports: [
HttpClientModule
]
**上記のコードは単なるデバッグ用です目的。私はset-csrfエンドポイントを持っていません。
ただし、投稿リクエストを送信しても、ヘッダーは送信されません。私はデバッグできません。
私はgithubのリポジトリにもこの問題を追加しました。 HttpXsrfInterceptorは、リクエストがGETかHEADか、あるいはhttpで始まっているかどうかをチェックします。 trueの場合、ヘッダーの追加はスキップされます。ここで
コードは、彼らがHTTP/Sの部分はスキップされている理由私はわからないHttpXsrfInterceptor class
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);
}
です。ここに私ですissue in github
CORSリクエストを使用していますか? – Alexandr
"Access-Control-Allow-Headers"、 "*" ' – netuser
という見出しを追加しました。角度は、http [s]リンクを別の方法で処理する必要があります。たとえば、各ドメインの最後のcsrfトークンを個別に格納します。おそらく、別のインターセプタウインチがcsrfをこのように扱うのは良いことでしょうか? – Alexandr