Как я могу предотвратить попытки моего приложения Angular прочитать document.cookie при запросах PUT / POST и PATCH от HttpClient?
- Myприложение работает в
iframe
в другом веб-приложении, где доступ к файлам cookie не разрешен!
Я не могу контролировать эту среду / приложение. - GET-запросы работают без проблем.
- Я использую Angular 6.0.2
Ошибка
put
, post
& patch
Запрос от HttpClient
производит следующую ошибку.
backend.service.ts: 127 DOMException: Не удалось прочитать свойство cookie из «Document»: документ помещен в «песочницу» и отсутствует флаг «allow-same-origin».в HttpXsrfCookieExtractor.push ../ node_modules/@angular/common/fesm5/http.js.HttpXsrfCookieExtractor.getToken (http://localhost:8080/44812272_a91e_4126_ad7b_6a54454…_sc-lightcontrol.jar/vendor.js:27596:37) в HttpXsrfInterceptor.push ../ node_modules/@angularjsh .hmHttpXsrfInterceptor.intercept (http://localhost:8080/44812272_a91e_4126_ad7b_6a54454…_sc-lightcontrol.jar/vendor.js:27633:39) в HttpInterceptorHandler.push ../ node_modules / @ angular / common / fesm5 /http.js.HttpInterceptorHandler.handle (http://localhost:8080/44812272_a91e_4126_ad7b_6a54454…_sc-lightcontrol.jar/vendor.js:27004:33) в HttpInterceptingHandler.ushdules / @angular / common / fesm5 / http.js.HttpInterceptingHandler.handle (http://localhost:8080/44812272_a91e_4126_ad7b_6a54454…_sc-lightcontrol.jar/vendor.js:27677:27) в MergeMapSubscriber.project (http://localhost:8080/44812272_a91e_4126_ad7b_6a54454…_sc-lightcontrol.jar/vendor.js:26755:184) в MergeMapSubscriber.push ../ node_modules / rxjs / _esm5 / internal / operator / mergeMap).js.MergeMapSubscriber._tryNext (http://localhost:8080/44812272_a91e_4126_ad7b_6a54454…_sc-lightcontrol.jar/vendor.js:110070:27) в MergeMapSubscriber.push ../ node_modules / rxjs / _esm5 / internal / operator / mergeMap.js.MergeMapSubscriber._next (http://localhost:8080/44812272_a91e_4126_ad7b_6a54454…_sc-lightcontrol.jar/vendor.js:110060:18) в MergeMapSubnode_modules / rxjs / _esm5 / internal / Subscriber.js.Subscriber.next (http://localhost:8080/44812272_a91e_4126_ad7b_6a54454…_sc-lightcontrol.jar/vendor.js:101403:18) в Observable._subscribe (http://localhost:8080/44812272_a91e_4126_ad7b_6a54454…_sc-lightcontrol.jar/vendor.js:104821:20) в Observable.push ../ node_modules / rxjs / _esm5 / internal / Observable.js.Observable._trySubscribe (http://localhost:8080/44812272_a91e_4126_ad7b_6a54454…_sc-lightcontrol.jar/vendor.js:100628:25)
Код
putTest()
, postTest()
и patchTest()
не работают с вышеуказанным исключением.
getTest()
работает.
const httpOptions = {
headers: new HttpHeaders({ 'Content-Type': 'application/json' }),
withCredentials: false
};
@Injectable({ providedIn: 'root' })
export class BackendService {
constructor(
private http: HttpClient,
private messageService: MessageService
) { }
putTest(): Observable<any> {
console.log('PUT test');
return this.http.put(BackendUrl.updateDeviceToControl, mockDevicePropertyData, httpOptions)
.pipe(
tap(_ => console.log('Success')),
catchError(this.handleError<any>('PUT test'))
);
}
patchTest(): Observable<any> {
console.log('PATCH test');
return this.http.patch(BackendUrl.updateDeviceToControl, mockDevicePropertyData, httpOptions)
.pipe(
tap(_ => console.log('Success')),
catchError(this.handleError<any>('PATCH test'))
);
}
postTest(): Observable<any> {
console.log('POST test');
return this.http.post(BackendUrl.updateDeviceToControl, mockDevicePropertyData, httpOptions)
.pipe(
tap(_ => console.log('Success')),
catchError(this.handleError<any>('POST test'))
);
}
getTest(): Observable<any> {
console.log('GET test');
return this.http.get(BackendUrl.updateDeviceToControl)
.pipe(
tap(_ => console.log('Success')),
catchError(this.handleError<any>('GET test'))
);
}
}