【问题标题】:Angular Firebase First argument "email" must be a valid stringAngular Firebase 第一个参数“电子邮件”必须是有效字符串
【发布时间】:2018-03-23 12:10:41
【问题描述】:

我的 firebase 注册组件遇到了一些问题。几天前它工作顺利,但后来我决定休息几天(可怕的错误),现在我的注册表单不起作用,我收到了这个错误:

{code: "auth/argument-error", message: "signInWithEmailAndPassword failed: First argument "email" must be a valid string.", ngDebugContext: DebugContext_, ngErrorLogger: ƒ}

注册表单很大,所以我尽力使它尽可能短。

html:

<form [formGroup]="myForm" (ngSubmit)="onSignup()">
      <div formGroupName="emailPass" class="form-group">
           <md-input-container class="col-md-6 md-icon-left">
               <input formControlName="email" mdInput #email type="email" name="email" class="form-control" placeholder="Email">
           </md-input-container>
           <md-input-container class="col-md-6 md-icon-left no-margin-bottom">
               <input mdInput formControlName="password" type="password" class="form-control" id="password" name="password" placeholder="Contraseña">
           </md-input-container>
           <md-input-container class="col-md-6 md-icon-left no-margin-bottom">
               <input mdInput type="password" formControlName="confirmPassword" class="form-control" name="password" placeholder="Confirmar Contraseña">
           </md-input-container>
           <button type="submit" [disabled]="!myForm.get('emailPass').valid" md-raised-button color="primary">Siguiente</button>
      </div>
</form>

signup.component.ts

import { Component, OnInit } from "@angular/core";
import { FormBuilder, FormGroup, Validators, FormControl, AbstractControl } from "@angular/forms";
import { AuthService } from '../../services/auth.service';
import { RutValidator } from 'ng2-rut';
import { EmailValidator } from '../../shared/validators/email';
import { PasswordValidator } from "../../shared/validators/password-validator";
import { IsEqualPassword } from "../../shared/validators/equal-password";

@Component({
  selector: 'my-page-sign-up',
  styleUrls: ['./sign-up.component.scss'],
  templateUrl: './sign-up.component.html'
})

export class PageSignUpComponent implements OnInit {
    myForm: FormGroup;

    constructor(private fb: FormBuilder,
                private authService: AuthService,
                rv: RutValidator) {
                    this.myForm = this.fb.group({
                      emailPass: this.fb.group({
                        email: ['', Validators.compose([Validators.required,
                          EmailValidator.isValid])],
                        password: ['', Validators.compose([Validators.required, PasswordValidator])],
                        confirmPassword: ['', Validators.required]
                        }, { validator: IsEqualPassword }, 
                      ),
        });
       }

    onSignup() {
        this.authService.signupUser(this.myForm.value);
    }

    ngOnInit(): any {}   

}

auth.service.ts

import { Injectable } from '@angular/core';
import { User } from "./user";
import { AngularFireAuth } from 'angularfire2/auth';
import * as firebase from 'firebase/app';
import { Observable } from 'rxjs/Observable';
import { Router } from '@angular/router';
import { AngularFireDatabase, FirebaseListObservable } from 'angularfire2/database';

@Injectable()
export class AuthService {

    user: Observable<firebase.User>;

  constructor(private firebaseAuth: AngularFireAuth,
              private router: Router,
              private afdb: AngularFireDatabase) 
              {
    this.user = firebaseAuth.authState;
  };

  signupUser(user: User) {
    firebase.auth().createUserWithEmailAndPassword(user.email, user.password).catch(function(error) {
      // Handle Errors here.
      var errorMessage = error.message;
      // ...
    }).then(value => {
        console.log('Success!', value);
               let userDetails = {
            firstName: user.firstName,
            lastName: user.lastName,
            email: user.email,
        }
        this.afdb.list('users').update(value.uid, userDetails);
        this.router.navigate(['/app/recibirpago']);
    })
    .catch(err => {
        console.log('Something went wrong:',err.message);
    });
  };

}

我认为我收到这些错误是因为 firebase 模块最近更新了,但在再次检查文档后,我发现我的问题没有解决方案。

感谢您的帮助!!

【问题讨论】:

  • 它看起来像一个 Firebase 错误而不是 Angular
  • 您可以记录电子邮件第一个参数以确保它是有效的电子邮件字符串吗?

标签: angular firebase authentication firebase-authentication


【解决方案1】:

我遇到了同样的问题。尝试将 toString 添加为:

   email: user.email.toString()

即使使用控制台或窗口警报进行调试也没有显示它,因为我的电子邮件出现在那里。但是当我添加 toString() 时,它突然起作用了。

【讨论】:

    猜你喜欢
    • 2020-09-24
    • 2018-03-04
    • 1970-01-01
    • 2018-04-06
    • 1970-01-01
    • 2019-02-26
    • 2021-02-08
    • 1970-01-01
    • 2018-08-29
    相关资源
    最近更新 更多