Как я могу проверить QR-код на основе идентификатора из Firestore? - PullRequest
0 голосов
/ 03 октября 2019

Я разрабатываю приложение Ionic 4, которое должно сканировать и проверять QR-код для подачи заявки, используя плагин PhoneGap BarcodeScanner. Сканирование работает должным образом, но у меня возникают трудности при проверке QR-кода.

Моя идея заключается в том, что QR-код действителен только для пользователя, если userID и PromotionID совпадают с QR-кодом (в базе данных Firestore). Я использую идентификаторы документа для генерации QR-кода. Например, QR-код '075u6SGzsZ3tWq1v3Trb' и 'XXDzN47QXqsGZIMeySw0' может использовать только пользователь123. Firestore example

Ниже приведена реализация

Example.page.ts:

 qr: any;

scanQRCode () {
  this.options= {
  preferFrontCamera : false, 
  showFlipCameraButton : true, 
  showTorchButton:true,
  disableSuccessBeep: false,
  torchOn: false,
  prompt: 'Scan your QRcode'
};
this.subscription = this.afs.collection('claims')
 .snapshotChanges()
 .subscribe(data => {

  this.qr= data.map(e => {
    return {
      id: e.payload.doc.id,
      promotionID: e.payload.doc.data()['promotion'],
      userID: e.payload.doc.data()['user'],
    };
  })
  console.log(this.item);
  this.subscription.unsubscribe();
});

    this.scanner.scan(this.options).then((data) => {
      this.scannedData = data;
      if(this.qr.promotionID && this.qr.userID == data){
      this.navCtrl.navigateForward('/nextPage');
    }else{
      return this.presentAlert('Error','Invalid QRCODE')
    }

  }, (err) => {
  console.log('Error: ',err);
 })
}

Example.page.html

<ion-button expand="block" icon-left (click)="scanQRCode()"><ion-icon name="qr-scanner"></ion-icon>Scan code</ion-button>

Я новичок в Ionic и Firebase, любые идеи и советы будут с благодарностью.

Спасибо.

1 Ответ

0 голосов
/ 04 октября 2019

Существует ряд проблем с этим.

Вы определяете параметры сканера и не передаете их scan():

this.options= {
  preferFrontCamera : true, 
  showFlipCameraButton : true, 
  showTorchButton:true,
  disableSuccessBeep: false,
  torchOn: false,
  prompt: 'Scan your QRcode'
};
this.scanner.scan(this.options).then((data) => {

Вы .subscribe() но не делаете* перечислите .unsubscribe(), что означает утечку памяти.

Вы нигде не звоните getUser() из того, что вы опубликовали - это this.claim ноль?

Когда выпроверяют, следует ли вам перенаправить на страницу результатов, которая не проверяет this.scannedData после того, как вы отсканировали ее, она просто сравнивает две части вашего пользователя с this.claim.claimuser == this.claim.promoid.

из частей, которые вы пытаетесьдля сравнения claim.claimuser никогда не будет существовать, потому что вы сопоставляете его с claim.user.

Мне действительно нужно начать снова, я думаю, извините.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...