0
votes

Comment passer un jeton dans la section d'en-tête dans le champ d'autorisation en angulaire

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


7 commentaires

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


4 Réponses :


1
votes

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);


5 commentaires

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);



1
votes

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,
    },
    ...
],

...

Visitez https://medium.com/@ryanchenkie_40935/angular-authentication-using-the-http-client-and-http-interceptors-2f9d1540eb8

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.


0 commentaires

0
votes

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.


0 commentaires

0
votes

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é.

entrez la description de l'image ici


0 commentaires