Как установить тип содержимого заголовка как application/json в angular-oauth2-odic?
Я устанавливаю заголовок 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 ответ
Я видел похожую проблему в репозитории angular-oauth2-oidc некоторое время назад, я повторю свой ответ здесь как ответ, чтобы его было легко найти.
Библиотека жестких кодов application/x-www-form-urlencoded
и я думаю, вероятно, вполне справедливо: RFC 6749, кажется, предписывает это:
4.3.2. Запрос токена доступа
Клиент делает запрос к конечной точке токена, добавляя следующие параметры в формате "application/x-www-form-urlencoded"...
Я немного удивлен, что ваши весенние загрузочные пакеты не поддерживают изменение возможных типов контента для конечной точки запроса токена пароля владельца ресурса. Можете ли вы попробовать перепроверить?
В качестве альтернативы, вы могли бы подать проблему с соответствующим пакетом весенней загрузки?
Единственный последний вариант, который я вижу (кроме использования библиотеки, которая для этого потока вполне возможна) на данный момент - это разветвление библиотеки и изменение внутренних компонентов для вашей пользовательской сборки.