Как сопоставить и проверить с предоставленным API в Ionic? - PullRequest
0 голосов
/ 10 декабря 2018

Я соответственно создал функцию входа в систему, но функция входа не работает. Всякий раз, когда я вводил образец ввода (phoneNumber и пароль), он не направлял меня на домашнюю страницу. Подробная информация об API представлена ​​на рисунках ниже.Есть что-то, что я пропускаю?Пожалуйста, ПОМОГИТЕ мне решить эту проблему.

Детали API: enter image description here

enter image description here

enter image description here

HTML-КОД:

<ion-header>
  <ion-navbar>
    <ion-title>
      Login
    </ion-title>
  </ion-navbar>
</ion-header>

<ion-content padding>
  <ion-list>
    <form name="form"(ngSubmit)="login()" novalidate>
      <ion-item>
        <ion-label fixed>Phone Number</ion-label>
        <ion-input type="number" name="phoneNumber" value="" [(ngModel)]="model.phoneNumber" required></ion-input>
      </ion-item>

      <ion-item>
        <ion-label fixed>Password</ion-label>
        <ion-input type="password" name="password" value="" [(ngModel)]="model.password" required></ion-input>
      </ion-item>
      <ion-item>
        <button ion-button>Enter</button>
      </ion-item>
    </form>
  </ion-list>
</ion-content>

.TS КОД:

import { Component } from '@angular/core';
import { NavController, AlertController, LoadingController, ToastController } from 'ionic-angular';
import { HomePage } from '../home/home';
import { apiService } from '../../providers/api-service.service';
import { AuthService } from '../../providers/auth-service.service';

@Component({
  selector: 'page-login',
  templateUrl: 'login.html'
})

export class LoginPage {
  model : any = {};
  response: any[] = [];
  constructor(public navCtrl: NavController, public apiService: apiService, public toastCtrl: ToastController, public alertCtrl: AlertController, public loadingCtrl: LoadingController, public AuthService: AuthService){}

  loginUser(){
    this.AuthService.login();
  }
  logoutUser(){
    this.AuthService.logout();
  }
  nextPage(data){
    this.navCtrl.push(HomePage,data).catch(err => {
      let alert = this.alertCtrl.create({
        title: 'Something',
        subTitle: 'something something',
        buttons: ['OK']
      });
      alert.present();
    });
  }
  errorToast(){
    let toast = this.toastCtrl.create({
      message: 'Cannot login',
      duration: 3000
    });
    toast.present();
  }
  logoutout(){
    let loader = this.loadingCtrl.create({
      content: "Loging out.....",
      duration: 1000
    })
    loader.present();
    this.loginUser();
  }
  login(){
    this.apiService.apiCall(this.model.phoneNumber, this.model.password)
    .then(data => {
      this.logoutout();
      this.nextPage(data);
    })
    .catch(error => {
      this.errorToast();
    })
  }
}

КОД ПОСТАВЩИКА:

api-service.service.ts

import {Injectable} from '@angular/core';
import {Http, Headers, RequestOptions} from '@angular/http';
import 'rxjs/add/operator/map'

@Injectable()
export class apiService{
    constructor(private http: Http){}

    apiCall(phoneNumber, password){
        let headers = new Headers({
            "X-Auth-PhoneNumber": '',
            "X-Auth-Password": '',
            "SW-Version": '',
            "Device-Id": '',
            "Device-Model": ''
        })
        let options = new RequestOptions({
            headers: headers
        });

        return this.http.get('https://api.keyway.com.my/client/mobile/verification'+ phoneNumber + password, options)
        .map(res => res.json())
        .toPromise();
    }
}

auth-service.service.ts

import {Injectable} from '@angular/core';
@Injectable()
export class AuthService{
    private isLoggedIn = false;
    constructor(){}

    login(): void{
        this.isLoggedIn = true;
    }
    logout(): void{
        this.isLoggedIn = false;
    }
    authenticated():boolean{
        return this.isLoggedIn;
    }
}

1 Ответ

0 голосов
/ 14 декабря 2018

Поскольку вы отправляете username и password с URL-адресом запроса, но в соответствии с определением запроса вам необходимо отправить заголовки, поэтому внесите некоторые изменения, как показано ниже -

apiCall(phoneNumber, password){
        let headers = new Headers({
            "X-Auth-PhoneNumber": phoneNumber',
            "X-Auth-Password": password,
            "SW-Version": '',
            "Device-Id": '',
            "Device-Model": ''
        })
        let options = new RequestOptions({
            headers: headers
        });

        return this.http.get('https://api.keyway.com.my/client/mobile/verification', options)
        .map(res => res.json())
        .toPromise();
    }

Также попробуйте console вывод по запросу.

login(){
    this.apiService.apiCall(this.model.phoneNumber, this.model.password)
    .then(data => {
      console.log(data);    // Console Output
      this.logoutout();
      this.nextPage(data);
    })
    .catch(error => {
      console.log(error);    // Console Error output
      this.errorToast();
    })
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...