Как установить тип содержимого заголовка как application / json в angular-oauth2-odic? - PullRequest
0 голосов
/ 06 сентября 2018

Я устанавливаю заголовок Content-Type как application/json из fetchTokenUsingPasswordFlow метода, но он идет как application/x-www-form-urlencoded. Есть ли способ установить тип содержимого заголовка как application/json?

Согласно исходному коду, заголовок Content-Type был жестко закодирован как application/x-www-form-urlencoded.

Я использую службы остальной загрузки при загрузке для бэкэнда, и он не разрешает application/x-www-form-urlencoded в качестве Content-Type. Ниже приведен пример кода Angular 6 для справки:

import { Component, OnInit, Input } from '@angular/core';
import { Router, ActivatedRoute } from '@angular/router';
import { Usermodel } from '../models/usermodel';
import { OAuthService } from 'angular-oauth2-oidc';
import { HttpHeaders } from '@angular/common/http';

@component({
  selector: 'app-login',
  templateUrl: './login.component.html',
  styleUrls: ['./login.component.css']
})
export class LoginComponent implements OnInit {
  @input() message: any;
  @input() apiUrl: any;
  @input() params: any;
  currentUser: Usermodel;
  model: any = {};
  loading = false;
  returnUrl: string;
  headers: HttpHeaders;

  constructor(private router: Router,
    private route: ActivatedRoute,
    private oauthService: OAuthService,
  ) {
    oauthService.tokenEndpoint = "http://localhost:7890/api/login";
    oauthService.requireHttps = false;
    this.oauthService.setStorage(localStorage);
    this.headers = new HttpHeaders().set('Content-Type', 'application/json');
    console.log('oauthtoken', this.oauthService.getAccessToken());
  }

  ngOnInit() {
    this.returnUrl = this.route.snapshot.queryParams['returnUrl'] || '/';
  }

  public login() {
    this.loading = true;
    this.apiUrl = 'login'
    console.log("Headers::->" + this.headers)
    this.oauthService.fetchTokenUsingPasswordFlow(this.model.userName, this.model.password, this.headers).then((resp) => {
      console.log('resp', resp);
    });
  }
}

1 Ответ

0 голосов
/ 12 сентября 2018

Я видел похожую проблему в репозитории angular-oauth2-oidc некоторое время назад, я повторю свой ответ здесь в качестве ответа, чтобы его было легко найти.

Жесткие коды библиотеки application/x-www-form-urlencoded, а я думаю , вероятно, вполне справедливо: RFC 6749, похоже, предписывает это :

4.3.2. Запрос токена доступа

Клиент отправляет запрос к конечной точке токена, добавляя следующие параметры в формате «application / x-www-form-urlencoded» ...

Я немного удивлен, что ваши весенние загрузочные пакеты не поддерживают изменение возможных типов контента для конечной точки запроса токена пароля владельца ресурса, вы можете попробовать перепроверить?

В качестве альтернативы, вы могли бы подать проблему с соответствующим пакетом весенней загрузки?

Единственный последний вариант, который я вижу (кроме использования библиотеки, которая для этого потока вполне возможна) на данный момент, - это разветвление библиотеки и изменение внутренних компонентов для вашей пользовательской сборки.

...