Nelson Oswaldo Gonzalez Santiago
Seria interesante conocer el manejo de datos desde una base de datos relacional con un motor transaccional como sql server, Oracle o mysql.
muchas gracias, muy interesante los vídeos.
Aprende a implementar un flujo de registro robusto en Angular con Firebase Authentication. Verás cómo inyectar AngularFireAuth, usar el método createUserWithEmailAndPassword, manejar errores con .then y .catch, y conectar tu formulario con two-way data binding mediante ngModel. Todo optimizado para un desarrollo claro y mantenible.
¿Cómo registrar usuarios en Firebase con Angular?
Para habilitar el registro, se agrega un constructor al servicio de autenticación e inyecta AngularFireAuth. Este objeto permite ejecutar operaciones de autenticación en Firebase y acceder a su API de usuario.
¿Qué hace AngularFireAuth y cómo inyectarlo?
Este objeto expone las operaciones de autenticación. Se inyecta como dependencia privada para usarlo dentro del servicio.
// authorizationService.ts import { Injectable } from '@angular/core'; import { AngularFireAuth } from 'angularfire2/auth'; @Injectable({ providedIn: 'root' }) export class AuthorizationService { constructor(private angularFireAuth: AngularFireAuth) {} registro(email: string, password: string) { return this.angularFireAuth.auth .createUserWithEmailAndPassword(email, password) .then((response) => { alert('Usuario registrado con éxito'); console.log(response); }) .catch((error) => { alert('Un error ha ocurrido'); console.log(error); }); } }
¿Cómo usar createUserWithEmailAndPassword con promesas?
El flujo usa promesas. A diferencia de .subscribe en Observables, aquí se encadenan .then y .catch para éxito y error.
console.log.¿Cómo manejar errores de autenticación correctamente?
Es clave informar al usuario y registrar el detalle técnico. Por ejemplo, mostrar un alert y usar console.log(error) para el diagnóstico.
¿Cómo conectar el formulario de registro con el servicio?
El botón de “Registrar” debe llamar una función registrar() en el componente. Los datos del formulario viajan mediante two-way data binding con ngModel hacia un objeto registro con email y password.
¿Cómo preparar registro.component.ts con two-way data binding?
Se crea un objeto local y una función que delega en el servicio.
// registro.component.ts import { Component } from '@angular/core'; import { AuthorizationService } from './authorizationService'; @Component({ selector: 'app-registro', templateUrl: './registro.component.html' }) export class RegistroComponent { registro: any = { email: '', password: '' }; constructor(private authService: AuthorizationService) {} registrar() { this.authService.registro(this.registro.email, this.registro.password); } }
¿Cómo enlazar el botón Registrar en registro.component.html?
Se usa two-way data binding con ngModel y se llama a registrar() en el click.
<!-- registro.component.html --> <input type="email" [(ngModel)]="registro.email" placeholder="Correo" /> <input type="password" [(ngModel)]="registro.password" placeholder="Contraseña" /> <button (click)="registrar()">Registrarse</button>
registro.¿Cómo habilitar el método email/password en Firebase Authentication?
Si aparece un error de “operación no permitida” y falta un provider para sign-in, es porque el método Email/Password está deshabilitado en Firebase.
¿Qué mensaje de error indica que falta un provider?
El sistema notifica que la operación no está permitida y que no existe un provider para ese sign-in. Esto apunta a la configuración de Authentication en el panel de Firebase.
¿Cómo verificar el usuario creado en el dashboard?
Tras habilitar Email/Password en Authentication y repetir el registro, se confirma el éxito con un alert. Luego, en el dashboard de Firebase, en la sección Users, aparece el nuevo usuario.
¿Tienes dudas sobre la integración con AngularFireAuth o el enlace con ngModel? Cuéntame en comentarios qué parte te gustaría ver en más detalle.
Por defecto Firebase no te da acceso directo a la tabla donde guarda la info de los usuarios.
una solución común es:
Registrar el usuario como lo ha hecho Eduardo.
Guardar recibidos del registro en un nodo (/Users) de tu base de datos.
En el nuevo nodo agrega toda la información que quieras.
Un ejemplo:
public regitro = (email, password) => { this.authFb.auth.createUserWithEmailAndPassword(email, password) .then((response) => { const $id = this.authFb.auth.currentUser.uid; this.afDB.database.ref('Users').child($id).set({ Pais: 'Rep. Dominicana', Edad: 30, Genero: 'M', provider: 'facebook' }); }) .catch((error) => { console.log(error); }); }
Esto te crea un nuevo nodo (Users), con el ID del usuario como $key.
Lo malo es que tienes que mantener la información en dos lugares.
Puedes leer la documentación, hay eventos que se lanzan cuando cambia el estado del usuario, te puede ayudar a matener la tabla Users.
Firebase user-auth
puedes hacer lo siguiente:
export interface Usuario { email: string; password: string; pais: string; edad: number; genero: string; provider: string; } crearUsuario (user : Usuario){ this.authFb.auth.createUserWithEmailAndPassword(user.email, user.password) .then(() => { this.authFb.list ( '/usuarios' ).push ( user ); }) .catch((error) => { console.log(error); }); }
Nelson Oswaldo Gonzalez Santiago
Seria interesante conocer el manejo de datos desde una base de datos relacional con un motor transaccional como sql server, Oracle o mysql.
muchas gracias, muy interesante los vídeos.
Diego Vallejo
AngularFireAuth debe ser importada en los providers
providers: [ LugaresServicesService, AutorizacionService, AngularFireAuth ],
Alexis Antonio Moraga Gallardo
Estuve teniendo un problema de object object, cuando trataba de acceder a la vista de login.
este error se generaba por que desde el componente de login accede al servicio de autorización creado, y este servicio requiere de el import de AngularFireAuhModule.
el error se soluciona importando en el app.module.ts
import { AngularFireAuthModule } from 'angularfire2/auth';
y en importrs
AngularFireAuthModule,
Bueno el error es bastante simple, pero lo comento por que no vi cuando lo importaron en las clases, pero buscando en los archivos de la lección logre note que eran lo que me provocaba ese error .
Saludos
Edward Hurtado Hurtado
Me pasó lo mismo
Milciades Vargas Liz
Irving Sarmiento
Probablemente sea un proxy que esté interfiriendo, prueba desde otra red para descartar esa posiblidad
Roberto Antonio González Medina
Lograste solucionarlo? me esta pasando lo mismo y tambien estoy en una red de mi trabajo
Emilio Jose Ugeda Sanoja
Hola! si llegan a obtener este error :
N {code: "auth/internal-error", message: "{"error":{"code":400,"message":"API key not valid.…son":"badRequest"}],"status":"INVALID_ARGUMENT"}}"}
Es debido a que cambiaron la API o la modificaron y las API no coinciden tanto la que esta en el import como la de firebaseConfig, solo deben verificar que sean las misma y problema resuelto!!!
Juan Daniel Gualtero Diaz
Gracias por el aporte
Carlos Uriel de Jesus Sánchez González
esta interesante pero seria ver como hacerlo con oracle.
Jovanny Hernandez
Desde aqui hice el import
import { AngularFireAuth } from '@angular/fire/auth'
Rodolfo Sáenz
Si les pasa esto:
{ "error": { "code": 403, "message": "Requests to this API identitytoolkit method google.cloud.identitytoolkit.v1.AuthenticationService.SignUp are blocked.", "errors": [ { "message": "Requests to this API identitytoolkit method google.cloud.identitytoolkit.v1.AuthenticationService.SignUp are blocked.", "domain": "global", "reason": "forbidden" } ], "status": "PERMISSION_DENIED" } }
Hagan esto: firebase-auth-internal-error-signup-are-blocked-web
Luego si les sale esto:
{ "error": { "code": 403, "message": "Requests to this API identitytoolkit method google.cloud.identitytoolkit.v1.AccountManagementService.GetAccountInfo are blocked.", "errors": [ { "message": "Requests to this API identitytoolkit method google.cloud.identitytoolkit.v1.AccountManagementService.GetAccountInfo are blocked.", "domain": "global", "reason": "forbidden" } ], "status": "PERMISSION_DENIED" } }
Hagan esto: using-google-apis-with-firebase-auth-and-firebase-ui-on-the-web
Saludos
Usuario anónimo
UserMe gusto mucho esta clase de Registro de usuarios utilizando AngularFireAuth.
Andres Gallardo
Porque then y no subscribe ? Gracias
Diego Forero
Team PlatziTodos los methodos de AngularFireAuth.auth retornan promesas por esto se usa then en lugar de suscribe.
Mabel Exalta Peña Garcia
Y cuando usas subscribe que tipo de dato retorna?. No entiendo bien porque usar subscribe.
Gracias
Juan Daniel Gualtero Diaz
Muy buena explicación
Roger Abarca
ACTUALICEN LOS CURSOS, que desesperante, llevo como una hora intentanto avanzar y nada que logro avanzar. No me guarda el usuario en local storage cuando me logeo o me registro
Diego Forero
Team PlatziEl curso de angular 6 lo encuentras aquí https://platzi.com/clases/angular-avanzado/, angular rompe muchas cosas entre actualizaciones de sus versiones, si quieres seguir este curso debes si o si hacerlo instalando angular 4.
Jose Pech
Yo lo estoy tomando con Angular 8, han cambiado varias cosas, pero el resolver los problemas te hace aprender más. Y además en los comentarios encuentras las soluciones rápidamente.
Juan Alejandro León Lozano
Estoy trabajando en un proyecto el cual tiene los datos en MySql, ya tengo el formulario de registro pero necesito implementar un metodo de cifrado y el login no lo he podido realizar.
moises mannarino
 .then((response) => { console.log('Success!', response); alert('Usuario Registrado con Exito!'); }).catch(error => { console.log(error); alert('Ups Error!'); }); }``` me siempre que guardo me envia al cach, pero si voy a ver me guarda el usuario en mi base de datos firebase este es el error que me sale
L {code: “auth/network-request-failed”, message: “A network error (such as timeout, interrupted connection or unreachable host) has occurred.”}```
sera que tiene que ver algo la red de la empresa ?
Request URL: https://www.googleapis.com/identitytoolkit/v3/relyingparty/signupNewUser?key=AIzaSyCIIN54Q87-QsmpU-f_8ZcNuNqacvHRTUk Referrer Policy: no-referrer-when-downgrade Provisional headers are shown Content-Type: application/json Origin: http://localhost:4200 Referer: http://localhost:4200/registro User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36 X-Client-Version: Chrome/JsCore/5.0.4/FirebaseCore-web key: AIzaSyCIIN54Q87-QsmpU-f_8ZcNuNqacvHRTUk```