J'essaie d'utiliser withCredentials pour envoyer un cookie à mon service, mais je ne sais pas comment le mettre en œuvre. La documentation indique "Si le serveur requiert des informations d'identification de l'utilisateur, nous les activerons dans les en-têtes de requête" Sans aucun exemple. J'ai essayé plusieurs manières mais il n'envoie toujours pas mon cookie. Voici mon code jusqu'à présent.
private systemConnect(token) {
let headers = new Headers();
headers.append('Content-Type', 'application/json');
headers.append('X-CSRF-Token', token.token);
let options = new RequestOptions({ headers: headers });
this.http.post(this.connectUrl, { withCredentials: true }, options).map(res => res.json())
.subscribe(uid => {
console.log(uid);
});
}
Essayez de changer votre code comme ça
let options = new RequestOptions({ headers: headers, withCredentials: true });
et
this.http.post(this.connectUrl, <stringified_data> , options)...
comme vous le voyez, le deuxième paramètre devrait être les données à envoyer (en utilisant JSON.stringify
ou juste ''
) et toutes les options dans un troisième paramètre.
À partir de Angular 4.3, HttpClient et Interceptors ont été introduits.
Un exemple rapide est présenté ci-dessous:
@Injectable()
export class WithCredentialsInterceptor implements HttpInterceptor {
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
request = request.clone({
withCredentials: true
});
return next.handle(request);
}
}
constructor(
private http: HttpClient) {
this.http.get<WeatherForecast[]>('api/SampleData/WeatherForecasts')
.subscribe(result => {
this.forecasts = result;
},
error => {
console.error(error);
});
Créer un Interceptor
serait une bonne idée d'injecter des éléments dans l'en-tête de l'application. D'autre part, si vous recherchez une solution rapide qui doit être effectuée au niveau de chaque demande, essayez de définir withCredentials
sur true
comme ci-dessous.
const requestOptions = {
headers: new HttpHeaders({
'Authorization': "my-request-token"
}),
withCredentials: true
};