Angular и проблема FireBase - PullRequest
       0

Angular и проблема FireBase

0 голосов
/ 04 апреля 2020

Я использую FireBase Rest API для входа и входа в систему. По какой-то причине, когда я подписываюсь на POST REQUEST для входа в систему, я получаю ответ, отличный от того, что показывают документы FireBase. это дает мне ответ без expiresIn. для входа это работает хорошо, я не мог найти никакого решения для этого спасибо

это мой сервис аутентификации

   import { User } from './user.model';
    import { Injectable } from '@angular/core';
    import { HttpClient, HttpErrorResponse } from '@angular/common/http';
    import { catchError, tap } from 'rxjs/operators';
    import { throwError, BehaviorSubject } from 'rxjs';

    export interface AuthResponseData{
    kind: string;
    idToken:string;
    email:string;
    refreshToken:string;
    expiresIn: string;
    localId: string;
    registered?: boolean;

    }

    @Injectable({
    providedIn: 'root'
    })
    export class AuthService {

     user = new BehaviorSubject<User>(null);
     constructor(private Http: HttpClient) { }

     signUp(email:string, password:string){
     return this.Http.post<AuthResponseData>('https://identitytoolkit.googleapis.com/v1/accounts:signUp? 
     key=xxxxxxxxxxxxxxxxxxxxxxx',
     {email : email,password: password, returnSourceToken : true}).
     pipe(catchError(this.errorHandler),
     tap(resData=>{
      console.log(resData);
      this.authHandler(resData.email,resData.localId,resData.idToken,+resData.expiresIn);}));
     }

здесь в методе входа я получаю ответ без expiresIn но документы говорят, что я должен получить это

     login(email:string,password:string){
     return this.Http.post<AuthResponseData> 
     ('https://identitytoolkit.googleapis.com/v1/accounts:signInWithPassword? 
     key=xxxxxxxxxxxxxxxxxxx',
    {email : email, password: password,returnSourceToken : 
    true}).pipe(catchError(this.errorHandler),tap(resData=>{
      console.log(resData);
      this.authHandler(resData.email,resData.localId,resData.idToken,+resData.expiresIn)

      }));
     }


  private authHandler(email:string,userId:string,token:string,expiresIn:number){
    const expDate = new Date(new Date().getTime()+ expiresIn * 1000)
    const user = new User(email,userId,token,expDate);

   this.user.next(user);
  }


  private errorHandler(errorResponse: HttpErrorResponse){
    let errMsg ='Some error occurred';
    if(!errorResponse.error || !errorResponse.error.error.message){
      return throwError(errMsg)
    }
    switch(errorResponse.error.error.message){
      case 'EMAIL_EXISTS':
        errMsg = 'Email Already Exsits';
        break
        case 'INVALID_PASSWORD':
          errMsg = 'Wrong password';
          break
          case 'EMAIL_NOT_FOUND':
            errMsg = 'Email was not found'
            break
    }
    return throwError(errMsg)
  }
}

1 Ответ

0 голосов
/ 04 апреля 2020

кажется, что в объекте, который вы отправили на запрос на публикацию, есть опечатка

, который вы использовали returnSourceToken, это должно быть returnSecureToken

, поэтому объект, который вы передаете на почту должно быть

{
  email: email,
  password: password,
  returnSecureToken: true
}

см. документацию по пожарной базе здесь https://firebase.google.com/docs/reference/rest/auth#section -создание-email-пароля

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