Я работаю в приложении с ionic 3 / Angular 4, и у меня проблема с функцией входа в систему. Я хочу изменить формат json с этого:
> this.data = {
> grant_type: "password",
> username: this.loginData.username,
> password: this.loginData.password,
> client_id: "client"
> };
к чему-то вроде этого
?grant_type=password&client_id=client&client_secret=secret&username=admin&password=123456
поэтому я могу использовать его для аутентификации токена следующим образом:
Я использовал его в ionic 1 / angularJS вот так
data: $httpParamSerializer($scope.data);
но я не знаю эквивалента в angular 4.
Заранее спасибо :)





Вам нужно будет использовать URLSearchParams
Базовый пример
let params = new URLSearchParams();
params.set('search', term); // the user's search value
Ваш сервис
import { Headers, RequestOptions, Http, Response, URLSearchParams } from '@angular/http';
// User is done editing, serialize and POST to web service
tokenAuthenticate(): void {
let headers = new Headers({ 'Content-Type': 'application/x-www-form-urlencoded' });
let options = new RequestOptions({ headers: headers });
// Dynamically serialize the entire object
// *** THIS IS THE SERIALIZATION ***
let params: URLSearchParams = this.serialize(this.selectedItem);
this._http.post('http://localhost:8080/api/oauth/token', params, options)
.map(this.extractData)
.catch(this.handleError);
}
/**
* Serializes the form element so it can be passed to the back end through the url.
* The objects properties are the keys and the objects values are the values.
* ex: { "a":1, "b":2, "c":3 } would look like ?a=1&b=2&c=3
* @param obj - Object to be url encoded
* @returns URLSearchParams - The url encoded system setup
*/
serialize(obj: any): URLSearchParams {
let params: URLSearchParams = new URLSearchParams();
for (var key in obj) {
if (obj.hasOwnProperty(key)) {
var element = obj[key];
params.set(key, element);
}
}
return params;
}
Вы можете поменять его на любой
Окей, спасибо, работает нормально, но у меня появилась новая ошибка: «ошибка»: «Неавторизовано», «сообщение»: «Для доступа к этому ресурсу требуется полная аутентификация»
Это не проблема с серверной частью. Это просто проблема синтаксиса функции входа в систему, и теперь она работает нормально. Спасибо за ответ :)
для функции <serialize (obj: SystemSetup)>: SystemSetup не знает, что я должен изменить? или мне нужно что-то импортировать ??