1. Crear un usuario de pruebas para loguearte en Authentication -> Crear usuario
2. En Realtime Database -> Reglas imponer que tanto para leer como escribir en la BBDD haya que estar logueado:
".read": "auth!=null",
".write": "auth!=null",
Si se quiere leer/escribir siempre sin necesidad de loguear pues poner directamente true3. En Configuración -> Configuración del proyecto -> General: hay que registrar la APP y ponerle un nombre (por ejemplo: com.lsg.empleados) para así obtener el ApiKey y el authDomain.
4. Instalar en VSCode el módulo de cookies: https://programando-angular.blogspot.com/2022/12/cookies.html
5. En src\app\app.component.ts en el ngOnInit:
firebase.initializeApp({
apiKey: "AIzaxxxxx3qVcKrXkaK_doD334",
authDomain: "com.lsg.empleados"
});
Crear un componente Login
Crear un loginService:
import { Injectable } from "@angular/core";
import { Router } from "@angular/router";
import firebase from "firebase/compat/app";
import 'firebase/compat/auth';
import { CookieService } from "ngx-cookie-service";
@Injectable()
export class LoginService {
constructor(private router:Router,private cookies:CookieService) {
}
token:string;
checkLogin(email:string,pw:string) {
firebase.auth().signInWithEmailAndPassword(email,pw).then(
response=>{
firebase.auth().currentUser?.getIdToken().then(
token => {
this.token = token;
this.cookies.set("token",this.token);
this.router.navigate(['/']);
}
)
}
);
}
getTokenId() {
return return this.cookies.get("token");
}
estaLogueado() {
return this.cookies.get("token");
}
logout() {
firebase.auth().signOut().then(
()=>{
this.token = "";
this.cookies.set("token",this.token);
this.router.navigate(['/']);
window.location.reload();
}
);
}
}
En el constructor de src\app\data.services.ts añadir este servicio:
constructor(private httpClient:HttpClient, private loginService:LoginService) {}
En el html del componente Login:
<form #formLogin="ngForm" (ngSubmit)="login(formLogin);" style="margin-top:20px;">
<input type="email" name="email" placeholder="email" ngModel>
<input type="password" name="pw" placeholder="Contraseña" ngModel>
<button type="submit">Aceptar</button>
</form>
El el ts del componente login:
import { Component, OnInit } from '@angular/core';
import { NgForm } from '@angular/forms';
import { LoginService } from './login.service';
@Component({
selector: 'app-login',
templateUrl: './login.component.html',
styleUrls: ['./login.component.css']
})
export class LoginComponent implements OnInit {
constructor(private loginService:LoginService) { }
ngOnInit(): void {
}
login(form:NgForm) {
const email = form.value.email;
const pw = form.value.pw;
this.loginService.checkLogin(email,pw);
}
}
Para poner los links en de login y logout en la navbar hay que hacerlo en el componente principal app en src\app\app.component.html:
<li *ngIf="!checkIfLogged()"><a routerLink="/login">Login</a></li>
<li *ngIf="checkIfLogged()"><a (click)="logout()" style="cursor:pointer;">Logout</a></li>
Y en src\app\app.component.ts:
checkIfLogged() {
return this.loginService.estaLogueado();
}
logout() {
return this.loginService.logout();
}

No hay comentarios:
Publicar un comentario