Yo uso API firebase Resto de signo en sesión. Por alguna razón cuando me suscribo a la solicitud POST del inicio de sesión consigo una respuesta diferente de lo que muestran los documentos base de fuego. me da la respuesta sin expiresIn. para el signo de que funciona bien no pude encontrar ninguna solución para esto gracias
esto es mi servicio de autenticación
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);}));
}
aquí en el método de inicio de sesión i obtener una respuesta sin expiresIn pero los documentos dicen que debería conseguirlo
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)
}
}
parece que hay un error tipográfico en el objeto que envió a la solicitud posterior ha utilizado returnSourceToken
, debe serreturnSecureToken
por lo que el objeto se pasa al puesto debe ser
{
email: email,
password: password,
returnSecureToken: true
}
consulte la documentación base de fuego aquí https://firebase.google.com/docs/reference/rest/auth#section-create-email-password