DEV Community

Derlys for kikstart.dev

Posted on

Agregando autenticación a tu app

Requisitos

Asegurate de tener una app básica creada, similar a la que hicimos en la serie # 1 Introducción a Kikstart UI.

Paso # 1

En primer lugar generamos los componentes y el módulo que los contendrá.

1: Crea una carpeta llamada auth y genera los componentes register, login y logout.

ng g module auth/register --route register --module app 
Enter fullscreen mode Exit fullscreen mode
ng g module auth/login --route login --module app 
Enter fullscreen mode Exit fullscreen mode
ng g module auth/logout --route logout --module app 
Enter fullscreen mode Exit fullscreen mode

Paso # 2

Renderizamos las rutas de los componentes creados.

1: Abre el archivo app.component.ts y agrega los labels dentro del array de links asi:

{ label: 'Register', path: '/register'}, { label: 'Login', path: '/login' }, { label: 'Logout', path: '/logout'}, 
Enter fullscreen mode Exit fullscreen mode

Paso # 3

Creamos el servicio,lo configuramos para que esté listo y utilizarlos en nuestro componente login.

1:Crea el servicio ejecutando el comando

 ng g service auth/auth 
Enter fullscreen mode Exit fullscreen mode

2:Añade las dependencias necesarias para utilizar las funcionalidades de firebase. Utiliza los siguientes comandos:

npm i @angular/fire npm install @angular/fire firebase --save 
Enter fullscreen mode Exit fullscreen mode

3:Abre el archivo auth.service.ts y agrega lo siguiente en la parte superior:

import * as firebase from 'firebase'; 
Enter fullscreen mode Exit fullscreen mode

4:En el mismo archivo auth.service.ts agrega lo siguiente en la clase AuthService:

export class AuthService { user: firebase.User; isLoggedIn: boolean; 
Enter fullscreen mode Exit fullscreen mode

5:Luego en el mismo archivo agrega lo siguiente en la parte superior:

import { AngularFireAuth } from '@angular/fire/auth'; 
Enter fullscreen mode Exit fullscreen mode

6:Cuando hayamos importado AngularFireAuth podemos inyectar su funcionalidad en el constructor:

 constructor(private readonly afa: AngularFireAuth) { this.afa.authState.subscribe((res) => { console.log(res); this.user = res; this.isLoggedIn = !!this.user; }); } } 
Enter fullscreen mode Exit fullscreen mode

7:Importa el modulo para utilizar observables asi:

import { from, Observable, ObservedValueOf } from 'rxjs'; 
Enter fullscreen mode Exit fullscreen mode

💡Nota

Si te aparece inactiva la línea que acabas de colocar en el punto 6 , no te preocupes , apenas estamos construyendo la lógica y no hemos usado Observables, vamos con calma 😉.

8:Como último punto en este paso en el archivo auth.service.ts agrega lo siguiente después del constructor:

login( email: string, password: string ): Observable<ObservedValueOf<Promise<firebase.auth.UserCredential>>> { return from(this.afa.signInWithEmailAndPassword(email, password)); } register( email: string, password: string ): Observable<ObservedValueOf<Promise<firebase.auth.UserCredential>>> { return from(this.afa.createUserWithEmailAndPassword(email, password)); } loginGoogle(): Observable< ObservedValueOf<Promise<firebase.auth.UserCredential>> > { const provider = new firebase.auth.GoogleAuthProvider(); return from(this.afa.signInWithPopup(provider)); } logout(): Observable<ObservedValueOf<Promise<void>>> { return from(this.afa.signOut()); } } 
Enter fullscreen mode Exit fullscreen mode

Paso # 4

Ahora crearemos las funciones para cada una de las formas de autenticación y luego las configuraremos.

💡Recuerda

En el paso anterior implementamos varias formas de autenticación cuando quieras puedes hacer uso de estos servicios solo debes configurarlo en tu componente como lo hacemos en el punto # 3 de este paso.

1: Abre el archivologin.component.ts y agrega lo siguiente en la parte superior:

import { Router } from '@angular/router'; import { AuthService } from '../auth.service'; 
Enter fullscreen mode Exit fullscreen mode

2:Inyecta e inicializa la forma de autenticación que usarás. En este caso usaras loginGoogle.

private router: Router, private service: AuthService 
Enter fullscreen mode Exit fullscreen mode

3: En el mismo archivo login.component.ts agrega la siguiente función:

loginGoogle(): void { this.service.loginGoogle().subscribe((res) => { console.log(res); return this.router.navigate(['/']); }); } 
Enter fullscreen mode Exit fullscreen mode

paso # 5

Aquí configuraremos el proyecto que creamos en firebase a nuestra app.

1:Busca en la terminal tu proyecto y ejecuta el siguiente comando:

ng add @angular/fire 
Enter fullscreen mode Exit fullscreen mode

💡 KikstartTip

Si es la primera vez que instalas @angular/fire en tu computador te hará preguntas como esta:
Allow Firebase to collect CLI usage and error reporting information? (Y/n).

2: Durante el proceso de instalación sobre el proyecto elige el que quieres desplegar.

Installing packages for tooling via npm. Installed packages for tooling via npm. UPDATE package.json (1516 bytes) ✔ Packages installed successfully. ✔ Preparing the list of your Firebase projects ? Please select a project: (Use arrow keys or type to search) ❯ site2 (site2-8ce5b) 
Enter fullscreen mode Exit fullscreen mode

3:Configura el enviroment con las llaves de tus proyectos en firebase.

4:En la consola de firebase busca tu proyecto.

5:En descripción general haz clic en configuración del proyecto.

Alt Text

3: Busca el siguiente título:

Alt Text

4: Busca la ruta src/enviroments/enviroment.ts y coloca esta secuencia de comandos con sus respectivas llaves:

export const environment = { production: false, firebase: { apiKey: '', authDomain: '', databaseURL: '', projectId: '', storageBucket: '', messagingSenderId: '', appId: '', measurementId: '', }, }; 
Enter fullscreen mode Exit fullscreen mode

5: En tu archivo app.module.ts importa las funcionalidades de la autenticación de firebase para utilizarlas en el siguiente paso.

Agrega las siguientes líneas en la parte superior:

import { AngularFireModule } from '@angular/fire'; import { environment } from '../environments/environment'; import { AngularFireAuthModule } from '@angular/fire/auth'; ``` 6: En el import del mismo archivo agrega esto: ```typescript AngularFireModule.initializeApp(environment.firebase), AngularFireAuthModule ``` ## paso # 6 Llegó el momento de los templetes, que se haga la luz y renderizamos la lógica que hemos creado. 1: En el archivo `login.component.html` crea el templete para renderizar un formulario y un botón con ayuda de `Kikstart UI`. ```html <!-- This flex container takes the full height and vertically centers the content --> <div class="d-flex flex-column h-100 justify-content-center"> <div class="container"> <div class="row"> <!-- This is a single column that is responsive --> <div class="col-12 col-md-6 offset-md-3"> <div class="card"> <div class="card-header">Login</div>  <div class="card-body"> <!-- The formGroup 'form' is defined in the component class --> </div> <div class="card-footer"> <div class="d-flex justify-content-between"> <a routerLink="/" class="ml-2 btn btn-outline-secondary"> Home </a>  <!-- The button has a click handler, it will be disabled if the form is not valid --> <button (click)="loginGoogle()" type="submit" class="btn btn-outline-success" > Log in </button>  </div>  </div>  </div>  </div>  </div>  </div> </div> ``` 2: Ve a la tu proyecto de firebase y busca la pestaña autenticación, en el botón añadir usuario ingresa un correo y una contraseña para autorizar el login. ![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/n97w8kiltncxc9lwb4q4.png) Ahora en la consola del navegador tu puedes ver que ya tenemos un usuario que utiliza este servicio. ![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/d58c47zncdusvmh2g19w.png) Sin embargo como nos damos cuenta en nuestra app que esto pasó, hagamos el siguiente paso. ## paso # 7 Creamos la lógica del logout y agregamos el código del templete para saber cuando estamos logueados o no. 1:Abre el archivo`logout.component.ts` y agrega lo siguiente en la parte superior: ```typescript import { Router } from '@angular/router'; import { AuthService } from '../auth.service'; ``` 2:Inyecta e inicializa el servicio del `logout` en el constructor. ```typescript constructor(private router: Router, private service: AuthService) {} ``` 3: En el mismo archivo `logout.component.ts` agrega la siguiente función: ```Typescript logout(): void { this.service.logout().subscribe((res) => { return this.router.navigate(['/']); }); } ``` 4:En el archivo `logout.component.html`agrega las siguientes líneas: ```typescript <button (click)="logout()" class="btn btn-secondary mr-1"> logout </button> ``` Asi dando click en el botón `logout` puedes notar que cuando ingresar al login nuevamente te solicitara tu correo. ## Resumen Hemos agregado 3 nuevos componentes `login`, `register` y `logout`, también hemos configurado estos 3 componentes para darle autenticación a nuestra app. Puedes encontrar el repositorio con los pasos [aquí](https://github.com/Derlys/Tutorial-auth). 
Enter fullscreen mode Exit fullscreen mode

Top comments (0)