繁体   English   中英

未在 Angular 8 的 Post API 调用中发送授权承载令牌

[英]Authorization Bearer token is not being sent in Post API Call in Angular 8

编辑 2:我在更新代码时忘记返回了...facepalm

编辑:

(更改邮政电话后:

this._http.post<userArray>(this.apiUrl,users$, httpOptions);

现在它在控制台日志中给了我这个..任何修复? 谢谢: https : //ibb.co/6PLK71j

我正在使用邮递员作为我的休息 API。

没有为 POST 调用发送授权令牌,但相同的授权令牌和 HTTP 标头对于 DELETE 调用工作正常。

我的 API: http : //dradiobeats.x10host.com/api/areas

(邮递员收藏: https : //www.getpostman.com/collections/deb24ed6036451580238

授权令牌:邮递员授权:承载令牌。

控制台日志:

控制台日志

没有授权头被传递

用户服务.ts :

 import { Injectable, Input } from "@angular/core"; import { HttpClient, HttpHeaders } from "@angular/common/http"; import { userArray } from "./users.model"; import { Observable } from "rxjs"; const httpOptions = { headers: new HttpHeaders({ 'Content-Type': 'application/json' , 'Authorization': 'Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImp0aSI6ImYyOTc3OTBmODc3ODlhYzg3MGE2ZmU3YTY0YzY2YmIwOGU4M2Q0ZmQzY2IyNmNiNWU3NDEzMTFmZjExMDk4NTA5NWUzN2IxN2I5YmI2YmFjIn0.eyJhdWQiOiIyIiwianRpIjoiZjI5Nzc5MGY4Nzc4OWFjODcwYTZmZTdhNjRjNjZiYjA4ZTgzZDRmZDNjYjI2Y2I1ZTc0MTMxMWZmMTEwOTg1MDk1ZTM3YjE3YjliYjZiYWMiLCJpYXQiOjE1NzU4NzM4MzksIm5iZiI6MTU3NTg3MzgzOSwiZXhwIjoxNjA3NDk2MjM5LCJzdWIiOiIyIiwic2NvcGVzIjpbXX0.J3nMXcPpqlRVvIRkrVAMblSUwdlXFmrkn9SPD2WE1DwdiqAMdhay8zAeD550ta9qWiNxHOKMAWF8t3H9cIgItaB9ZX2CxoxzS5P1nJFzit8qxiB-gzJL3mpybrnLtrKGjxsM5i_lBvdJsnhWzi15jKWIu-RNxUYPnXCjuxnXYEiyoJg17hsYUh4910VfFWx4R3WvH7WOvczF53IDKyX5fSTt4WSJUqciuNepkO6Klc8sj_yPmDPQltUjUXSSplkOQ8sL5uHk7PmzSjIfoR8RC0A-YQqI9mbZMTyJ0IyKoAHvRHF8q1cW5qfUmLXTgxcCTmFPqXqIlcAoOoJMCxke5fl0PuK0rgU7dxouATk_3B6cio7-7Zgps0iopDpk2nm-o40mjSiOUGb2kyKckYN09orYuan5wEd1KJ873ejKEgBWOhJu4gQFps8M9VoDXncAqMxeBqbUY1UZENx_n6uduQ_SAY4rgIUFCixfNc5Y_-HLDa108u4-z3APGbdxrhEdZXyHz9xQTaLrWcU_iCJ5g_ObT5VGZHtawZbfOYm2ZZpjPiCZpXunhrsbAcHBX64akWcehmT2gUJqPsxvaObKN3nayML1NHtdZGgAHUE89clhIH610Fod0C_jMTqpU7IkY9aSU781HsQVlHNw3qGbTinWfYPDBG0Lkp9NnmRe9BU' , 'Accept' : 'application/json' }) }; @Injectable({ providedIn: "root" }) export class UsersService { users$: userArray[]; apiUrl = "http://dradiobeats.x10host.com/api/areas"; delUrl = "http://dradiobeats.x10host.com/api/areas"; constructor(private _http: HttpClient) {} getUsers() { return this._http.get<userArray[]>(this.apiUrl); } deleteUser(id: userArray): Observable<userArray> { const url = `${this.apiUrl}/${id}`; console.log(); return this._http.delete<userArray>(url, httpOptions); } onSubmit(users$: userArray[]): Observable<userArray> { console.log(users$); return this._http.post<userArray>(this.apiUrl, httpOptions); } }

添加 Post.ts

 import { Component, OnInit } from "@angular/core"; import { UsersService } from "src/app/users.service"; @Component({ selector: "app-add-posts", templateUrl: "./add-posts.component.html", styleUrls: ["./add-posts.component.css"] }) export class AddPostsComponent implements OnInit { name: string; description: string; domain: string; picture: string; id: number = 29; constructor(private userService: UsersService) {} ngOnInit() {} onSubmit() { const users$ = { name: this.name, description: this.description, domain: this.domain, picture: this.picture }; this.userService.onSubmit(users$).subscribe(); } }

有人可以帮我弄这个吗? 谢谢。 C:

使用this._http.post<userArray>(this.apiUrl, data , httpOptions);

第二个参数是你需要传递的数据

使用角度拦截器将令牌添加到每个请求。

import { Injectable } from '@angular/core';

import {
  HttpEvent,
  HttpInterceptor,
  HttpHandler,
  HttpRequest,
  HttpResponse
} from '@angular/common/http'
import { Observable } from 'rxjs';
import { tap } from 'rxjs/operators';


@Injectable()

export class ApiHeaderInterceptor implements HttpInterceptor {

  constructor() { }

  // intercept request and add token
  intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {

    const bearer = 'Bearer eyJ0eXAiOiJKV1QiLCJh.....'; // this.anyService.getToken();

    if (bearer) {
      request = request.clone({
        setHeaders: {
          'Authorization': bearer,
        }
      });
    }

    return next.handle(request)
      .pipe(
        tap(event => {
          if (event instanceof HttpResponse) {
          }
        }, error => {
          // Hadle Errors
        })
      );

  };
}

像这样将它添加到您的 app.module 提供程序

providers: [
    { provide: HTTP_INTERCEPTORS, useClass: ApiHeaderInterceptor, multi: true },
],

我认为您的帖子请求应该是这样的

this._http.post<userArray>(this.apiUrl,users$, httpOptions);

您将httpOptions作为第二个参数传递,但它应该是 post 请求的第三个参数。 第二个参数应该是身体。

像这样

post(url: string, body: any, options:....

有关更多详细信息,请参阅他们的DOC

同样在组件中,您通过传递单个用户但服务期望用户数组来调用服务的onSubmit方法。 因此,您必须像下面那样更改服务onSubmit方法签名。 所以我也期待一个用户。

 onSubmit(users$: userArray)

您的请求正文在 onSubmit() 后调用中丢失。

this._http.post(<url>, <request body>, <headers>);

试试这个: this._http.post<userArray>(this.apiUrl, requestData , httpOptions);

帖子中的第二个参数是没有对象的请求对象,您无法发送帖子请求

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM