获取请求时的angular2基本授权 - 405

angular2 basic authorization on get request - 405

我正在尝试获取基本授权以处理 Get 请求,但出现 2 个异常:

OPTIONS http://localhost/drupal/user/1?_format=json

XMLHttpRequest cannot load http://localhost/drupal/user/1?_format=json. Response for preflight has invalid HTTP status code 405

我在 drupal 8 后端使用 angular2

这是我的服务

var _baseUrl = "http://localhost/drupal";

@Injectable()
export class DrupalService {

  private actionUrl: string;

  constructor(private _http: Http, private _apiUrl: DrupalApi) {

     this.actionUrl = _baseUrl + _apiUrl;
  }

  authHeaders() {

     let username = 'username';
     let password = 'password';

     let token = btoa(username + ':' + password);

     var headers = new Headers();
     headers.append('Authorization', 'Basic ' + token);

     headers.append('Content-Type', 'application/json');
     headers.append('Accept', 'application/json');

     return headers;
  }

  public GetSingle = (id: number): Observable<Response> => {
     return this._http.get(this.actionUrl + id + '?_format=json'
      , {headers: this.authHeaders()}).map(res => res.json());
  }

}

但是当我尝试来自邮递员应用程序的相同请求时它有效

我该如何解决?

在 Postman 中,您正在发送 header:

Authorization: Basic bXVyaGFmOmhleGFkZWNpbWFsMDU

但是在angular你超过了:

  headers.append('Authorization', 'Basic ' + btoa('bXVyaGFmOmhleGFkZWNpbWFsMDU'));

最终会是:

Authorization: Basic YlhWeWFHRm1PbWhsZUdGa1pXTnBiV0ZzTURV

所以,不要将字符串转换为 base64

headers.append('Authorization', 'Basic bXVyaGFmOmhleGFkZWNpbWFsMDU');

更新

错误代码 405 表示:Method Not Allowed,这意味着 drupal 不允许 OPTIONS 请求。我以前没有使用过 Drupal。但是,应该有一种方法允许 OPTIONS 请求。