Ionic - ngModel Не отправляет поле пароля во время проверки App Store


Я разрабатываю приложение и хочу отправить его в App Store, но мне постоянно отказывают, потому что группа проверки Apple не может войти в систему с моей демо-учетной записью.

После проверки журналов сервера кажется, что поле пароля не было отправлено в мой бэкэнд.

problem.spring.common.AdviceTraits Bad Request: 
Validation failed for argument [0] in public 
org.springframework.http.ResponseEntity<web.rest.UserJWTController$JWTToken> 
web.rest.UserJWTController.authorize(web.rest.vm.LoginVM): 
[Field error in object 'loginVM' on field 'password': rejected value []; 
codes [Size.loginVM.password,Size.password,Size.java.lang.String,Size]; 
arguments [org.springframework.context.support.DefaultMessageSourceResolvable: 
codes [loginVM.password,password]; arguments []; 
default message [password],100,4]; default message [个数必须在4和100之间]]

Но когда я тестирую локально, я не могу воспроизвести эту ошибку.

логин.страница.html

  <form class="login-form">
    <ion-input type="string" [(ngModel)]="account.username" name="username" placeholder="username"></ion-input>
    <ion-input type="password" [(ngModel)]="account.password" name="password" placeholder="password"></ion-input>
    <div style="width: 100%; height: 15px"></div>
    <ion-button expand="block" (click)="doLogin()" color="warning" fill="outline">login</ion-button>
  </form>

и мой логин.page.ts

export class LoginPage implements OnInit {

  account: { username: string; password: string; rememberMe: boolean } = {
    username: '',
    password: '',
    rememberMe: true
  };

  constructor(
    public loginService: LoginService,
    public toastController: ToastController,
    public router: Router,
  ) {
  }

  ngOnInit() {
  }

  public doLogin() {
    this.loginService.login(this.account).then(
      () => {
        const toast = await this.toastController.create({
          message: 'log in success',
          duration: 3000,
          position: 'top'
        });
        await toast.present().then(() => history.back());
      },
      (err) => {
       \\ some error handle 
  }
}

Я думал, что это может быть проблема с ngModel, но даже после того, как я перехожу к динамическим формам, Apple сообщает, что кнопка входа в систему не может быть нажата, я предполагаю, что привязка данных между html и моделью была нарушена, но я действительно просто не могу найти почему.

после изменения:

    <form class="login-form" role="form" (ngSubmit)="doLogin()" [formGroup]="loginForm">
      <ion-input type="text" class="form-control" name="username" id="username" placeholder="邮箱"
                 formControlName="username"></ion-input>
      <ion-input type="password" class="form-control" name="password" id="password" placeholder="密码"
                 formControlName="password"></ion-input>
      <ion-button [disabled]="loginForm.invalid" type="submit" expand="block" color="warning" fill="outline">登录</ion-button>
    </form>
export class LoginPage implements OnInit {

  loginForm = this.fb.group({
    username: ['', [Validators.required, Validators.minLength(4), Validators.maxLength(20)]],
    password: ['', [Validators.required, Validators.minLength(4), Validators.maxLength(20)]],
    rememberMe: [true]
  });

  constructor(
    public loginService: LoginService,
    public toastController: ToastController,
    public router: Router,
    private fb: FormBuilder
  ) {
  }

  ngOnInit() {
  }

  public doLogin() {
    this.loginService.login({
      username: this.loginForm.get('username')!.value,
      password: this.loginForm.get('password')!.value,
      rememberMe: this.loginForm.get('rememberMe')!.value
    }).then(
      async () => {
        const toast = await this.toastController.create({
          message: 'login success',
          duration: 3000,
          position: 'top'
        });
        await toast.present().then(() => history.back());
      },
      async (err) => {
        \\ some error handler
      }
    );
  }
}

ионная информация

Ionic:

   Ionic CLI                     : 6.10.0 (/usr/local/lib/node_modules/@ionic/cli)
   Ionic Framework               : @ionic/angular 5.1.0
   @angular-devkit/build-angular : 0.803.26
   @angular-devkit/schematics    : 8.3.26
   @angular/cli                  : 8.3.26
   @ionic/angular-toolkit        : 2.2.0

Cordova:

   Cordova CLI       : 9.0.0 ([email protected])
   Cordova Platforms : android 8.1.0, ios 5.1.1
   Cordova Plugins   : cordova-plugin-ionic-keyboard 2.2.0, cordova-plugin-ionic-webview 4.1.3, (and 21 other plugins)

Utility:

   cordova-res : 0.14.0
   native-run  : 1.0.0

System:

   ios-deploy : 1.10.0
   ios-sim    : 8.0.2
   NodeJS     : v14.1.0 (/usr/local/Cellar/node/14.1.0/bin/node)
   npm        : 6.14.5
   OS         : macOS Catalina
   Xcode      : Xcode 11.5 Build version 11E608c

Я очень признателен за любую мысль, чтобы решить эту ошибку или позволить мне воспроизвести ошибку локально.

С наилучшими пожеланиями,

Венджи


person Wenjie Hou    schedule 09.06.2020    source источник
comment
не вижу никаких проблем в коде. Были ли у вас какие-либо проблемы с выпускной сборкой перед отправкой или вы обнаружили какие-либо проблемы с тестовой сборкой? Должна возникнуть проблема с одним из них. Также они отправили скриншот отказа? Возможно, проблема с устройствами, которые они тестировали. Обычно они тестируют его на iPad, если поддержка iPad добавлена ​​​​в сборку.   -  person Samin    schedule 09.06.2020
comment
Спасибо за ваш комментарий. Да, я тестировал сборку релиза в Testflight на iPad, я не нашел такой проблемы, однако на их скриншоте было видно, что поле пароля пусто. Я действительно не понимаю, почему это могло произойти   -  person Wenjie Hou    schedule 09.06.2020


Ответы (1)


Я меняю каждый ионный ввод на собственный ввод html и решил проблему

person Wenjie Hou    schedule 11.06.2020