J'ai obtenu un jeton et stocké dans "this.token" comme
{headers: new HttpHeaders({ 'Authorization': 'bearer '+ this.token,
Lorsque j'ai essayé de transmettre les valeurs de jeton dans la section d'en-tête, je n'obtiens aucun résultat. Je suis fatigué de passer comme,
this.token = Venktoken; console.log(this.token);
Comment passer le jeton dans la section d'en-tête
4 Réponses :
Essayez comme ceci:
import { HttpClient, HttpResponse ,HttpHeaders} from '@angular/common/http';
let headers = new HttpHeaders() .set('Authorization', 'Bearer ' + this.token) .set('Content-Type', 'application/json') .set('InstanceName', 'ORISSA'); return this.http.post(this.api_url,null, headers );
Pour définir plusieurs en- têtes, essayez comme ceci:
let header = new HttpHeaders().set("Authorization", 'Bearer ' + this.token); return this.http.post(this.api_url,null, header);
Merci @Adrita Sharma, je dois passer un autre paramètre comme - var data1 = "'InstanceName': 'ORISSA', 'Content-Type': 'application/json'";
dans l'en-tête. J'ai passé comme ceci let headers = new HttpHeaders().set("Authorization", 'Bearer ' + this.token); return this.http.post(url,data1, { headers: headers })
mais obtenant une erreur car "le type de média de l'entité de demande 'text / plain' n'est pas pris en charge pour cette ressource"
Merci @Adrita Shama pour votre réponse, mais j'obtiens maintenant comme "401 (non autorisé)" dans la console et dans l'onglet réseau j'obtiens "L'autorisation a été refusée pour cette demande.". Cependant, dans l'onglet réseau, j'obtiens les valeurs de jeton, mais lorsque j'ai essayé de transmettre la même chose dans le code ci-dessous, une erreur s'est produite.
Mon code est `` fetchFarmerDetails (Venktoken: string) {this.token = Venktoken; console.log (this.token); let url = " 169.38.82.132:94/GetFarmerInfo "; let headers = new HttpHeaders (). set ('Authorization', 'Bearer' + this.token) .set ('Content-Type', 'application / json'). set ('InstanceName', 'ORISSA'); return this.http.post (url, en-têtes)}; `
"401 (non autorisé)" signifie que le jeton que vous transmettez est invalide ou a expiré
le problème avec votre appel de méthode de publication http. veuillez passer null après l'URL. return this.http.post (url, null, en-têtes);
En ce qui concerne la meilleure façon de gérer les en-têtes d'authentification dans Angular> 4, il est préférable d'utiliser les intercepteurs Http pour les ajouter à chaque requête, puis d'utiliser les gardes pour protéger vos itinéraires.
Voici un exemple complet d'un AuthInterceptor que j'utilise dans mon application:
auth.interceptor.ts
headersOk := handlers.AllowedHeaders([]string{"*"}) originsOk := handlers.AllowedOrigins([]string{"*"}) methodsOk := handlers.AllowedMethods([]string{"GET", "HEAD", "POST", "PUT", "OPTIONS"})
Vous devrez enregistrer votre intercepteur dans l'app.module en tant que fournisseur:
app.module.ts
import { HTTP_INTERCEPTORS, HttpClientModule } from '@angular/common/http'; import { AuthInterceptor } from '../auth/auth.interceptor'; ... imports: [ HttpClientModule, ... ], providers: [ { provide : HTTP_INTERCEPTORS, useClass: AuthInterceptor, multi : true, }, ... ], ...
En ce qui concerne le côté Go des choses, il s'agit probablement d'un cas de non-concordance entre les en-têtes de demande que vous envoyez et les en-têtes autorisés par CORS. La première chose que vous devriez essayer est de les autoriser tous:
import { HttpEvent, HttpHandler, HttpInterceptor, HttpRequest } from '@angular/common/http'; import { Injectable } from '@angular/core'; import { Observable } from 'rxjs/Observable'; import { AuthService } from './auth.service'; @Injectable() export class AuthInterceptor implements HttpInterceptor { intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> { req = req.clone({ setHeaders: { 'Content-Type' : 'application/json; charset=utf-8', 'Accept' : 'application/json', 'Authorization': `Bearer ${AuthService.getToken()}`, }, }); return next.handle(req); } }
Et si le problème disparaît, essayez de structurer soigneusement votre CORS un par un en fonction de ce que votre client envoie.
Comme méthode alternative, vous pouvez essayer d'utiliser cette bibliothèque angular-jwt. Elle fournit un HttpInterceptor
à l' HttpInterceptor
qui attache automatiquement un jeton aux requêtes HttpClient
.
De plus, il a beaucoup d'aides isTokenExpired
comme isTokenExpired
, decodeToken
, etc. dans JwtHelperService . Vous pouvez le configurer en tant que module:
JwtModule.forRoot({ config: { // ... headerName: 'Authorization', tokenGetter: () => { return localStorage.getItem('access_token'); } } });
L'exemple ci-dessus utilise localStorage, mais vous pouvez stocker le jeton n'importe où sur le client en fonction de votre cas d'utilisation exact.
Réponse courte
let headers = new HttpHeaders() .set('Authorization', 'Bearer ' + token) .set('Content-Type', 'application/json'); this.http.put(`${url}`, null, { headers }); this.http.get(`${url}`, { headers }); this.http.delete(`${url}`, { headers });
Plus de détails ( comment j'ai découvert )?
Lorsque vous survolez la fonction, vous trouverez des en- headers
sous l' objet d' options
pas directement.
les en-têtes peuvent être de type HttpHeaders
ou string . Je préfère utiliser HttpHeaders
comme je vous l'ai montré.
let headers = new HttpHeaders ({'Authorization': 'bearer' + this.token,}); return this.http.post (this.apiUrl, data, {headers: headers})
où est stocker votre token?
vous pouvez passer le jeton lors de l'appel de l'API
Merci @Umesh, recevoir le message "L'autorisation a été refusée pour cette demande" dans l'onglet réseau et dans la zone de la console, recevoir le message comme "401 (non autorisé)"
le jeton ne passe pas dans l'api. peut montrer la méthode comment vous appelez api
J'ai créé un stackblitz et le lien est " stackblitz.com/edit/angular-ifi2zs " et j'ai travaillé sur 4 fichiers - app.component.ts, app.component.html, app.module.ts et people.service.ts
fetchPeople () api obtient une erreur afin que le jeton n'obtienne pas