Я создаю форму входа, которая отправляет данные в службу входа HTTP.
Он очень хорошо работает на устройствах Android, но на IOS он сообщает, что требуется электронная почта, пароль и идентификатор_устройства, поэтому HTTP-запрос не выполняет, а не отправляет данные формы, пока он успешно выполняется в Android с кодом состояния 200.
Кто-нибудь знает, почему это происходит?
Функция входа в систему:
onLogin(form: NgForm) {
console.log('login for is: ', { email: "bexel@edigits.net", password:
"Karem@123", device_id: "123" });
this.userService.login(this.login).then(res => {
if (res.status = 200) {
console.log(res);
if (res.data.user.admin_id) {
this.storage.set('admin_id', res.data.user.admin_id);
}
this.storage.set('token', res.data.token);
this.storage.set('device_id', this.device.uuid);
this.storage.set('name', res.data.user.name);
this.storage.set('account_id', res.data.user._id);
this.storage.set('picture', res.data.user_picture);
this.navCtrl.setRoot(StatsPage);
}
console.log('stored keys', this.storage.keys());
this.onDisplayToaster('this is our login response '+ res.status);
}).catch(e => {
console.error(e);
console.log(form.value);
});
}
Функция входа в службу поддержки пользователей:
login(obj: any) {
return this.apiService.post('login', obj);
}
API-сервис:
@Injectable()
export class WebApiService {
errorMessage: string;
headers = {
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Methods': 'POST, GET, OPTIONS, PUT',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
constructor(
private http: HttpClient,
private httpService: HTTP,
private toastCtrl: ToastController
) { }
private formatErrors(error: any) {
return Observable.throw(error);
}
get(path: string, params?: HttpParams) {
return this.httpService.get(`${environment.api_url}${path}`, params,
this.headers)
.then(res => {
JSON.parse(res.data);
console.log('this is the res', res.data);
return JSON.parse(res.data);
}).catch(e => { console.error(this.formatErrors(e)); });
}
post(path: string, body: Object = {}) {
return this.httpService.post(`${environment.api_url}${path}`, body,
this.headers)
.then(res => {
JSON.parse(res.data);
console.log('this is the res', JSON.parse(res.data));
return JSON.parse(res.data);
}).catch(e => { console.error(this.formatErrors(e)); });
}
}
Журнал консоли:
2018-11-12 08:14:15.834137+0200 bexelApp[1115:17895] ERROR: {"_isScalar":false,"error":{"status":401,"headers":{"server":"Apache/2.4.18 (Ubuntu)","content-type":"application/json","connection":"Keep-Alive","date":"Mon, 12 Nov 2018 06:14:15 GMT","content-length":"125","keep-alive":"timeout=5, max=100","cache-control":"no-cache"},"url":"http://198.211.125.43/bexelapi/mobapi/login","error":"{\"message\":{\"email\":[\"The field is required.\"],\"password\":[\"The field is required.\"],\"device_id\":[\"The field is required.\"]}}"}}
2018-11-12 08:14:15.843486+0200 bexelApp[1115:17895] ERROR: {"__zone_symbol__currentTask":{"type":"microTask","state":"notScheduled","source":"Promise.then","zone":"angular","cancelFn":null,"runCount":0},"line":443,"column":20,"sourceURL":"http://localhost:8080/build/main.js"}
Функция работает на Androidd, но не на IOS, обратите внимание, что я попытался ввести данные для входа в систему как статические, чтобы убедиться в правильности учетных данных для входа, но с тем же результатом.
Я попытался обновить плагин Native HTTP с тем же результатом.