Preparación de vistas para login y registro

Clase 60 de 80Curso de Angular 4

Resumen

Implementar autenticación en Angular con Json Web Tokens (JWT) arranca con una base sólida: dos páginas de login y registro, rutas claras y un servicio centralizado de autorización. A continuación se muestra cómo estructurar componentes, maquetar con Bootstrap y preparar un servicio reutilizable, dejando lista la integración posterior con Firebase.

¿Qué construimos para la autenticación con Angular y JWT?

Empezamos creando dos componentes: login y registro. Se duplicó el componente de contacto y se renombraron archivos y selectores para cada caso. Luego, se configuraron rutas en AppModule y se añadió una barra de navegación con enlaces a ambos formularios usando routerLink. Finalmente, se creó un autorizacionService con métodos login y registro, inyectado en los componentes para probar su ejecución con console.log.

  • Habilidades practicadas: creación de componentes en Angular. Configuración de rutas. Maquetación con Bootstrap. Inyección de dependencias. Uso de services y funciones flecha. Pruebas con console.log.
  • Conceptos clave: Json Web Tokens (JWT). routerLink. @Injectable. navbar-right. Clases de Bootstrap como container, row, col-md-4, col-md-offset-4, well, btn, btn-primary, btn-default, btn-block.

¿Cómo crear las páginas de login y registro con Bootstrap?

Primero se generó el componente de login, ajustando selector, template y ruta. Luego se maquetó un formulario centrado con la grilla de Bootstrap, y se repitió el proceso para registro.

¿Cómo configurar el componente de login?

  • Duplicar el componente existente y renombrarlo a LoginComponent.
  • Actualizar selector a app-login y el templateUrl a login.component.html.
// login.component.ts
import { Component } from '@angular/core';

@Component({
  selector: 'app-login',
  templateUrl: './login.component.html'
})
export class LoginComponent {}

¿Cómo maquetar el formulario con Bootstrap?

  • Centrar el formulario con col-md-4 y col-md-offset-4 dentro de un container y row.
  • Usar form-control para los campos y botones con btn.
<!-- login.component.html -->
<div class="container">
  <div class="row">
    <div class="col-md-4 col-md-offset-4">
      <div class="well">
        <h1>login</h1>
        <label>email</label>
        <input type="email" class="form-control">
        <br>
        <label>contraseña</label>
        <input type="password" class="form-control">
        <hr>
        <a class="btn btn-primary btn-block">login</a>
        <a class="btn btn-default btn-block">cancelar</a>
      </div>
    </div>
  </div>
</div>

Para registro, se duplicó el de login, se renombraron archivos y referencias, y se cambió el título a “registrarse”.

// registro.component.ts
import { Component } from '@angular/core';

@Component({
  selector: 'app-registro',
  templateUrl: './registro.component.html'
})
export class RegistroComponent {}

¿Cómo declarar rutas y un servicio de autorización reutilizable?

Se añadieron rutas en AppModule para login y registro. Luego, se incorporó una navbar con enlaces a la derecha y se creó un service autorizacion.service.ts con métodos mínimos para probar el flujo.

¿Cómo definir rutas en AppModule?

  • Agregar rutas login y registro con sus componentes.
  • Incluir componentes en declarations y el servicio en providers.
// app.module.ts (fragmento)
import { RouterModule, Routes } from '@angular/router';
import { LoginComponent } from './login/login.component';
import { RegistroComponent } from './registro/registro.component';
import { AutorizacionService } from './services/autorizacion.service';

const routes: Routes = [
  { path: 'login', component: LoginComponent },
  { path: 'registro', component: RegistroComponent }
];

@NgModule({
  declarations: [LoginComponent, RegistroComponent],
  imports: [RouterModule.forRoot(routes)],
  providers: [AutorizacionService]
})
export class AppModule {}

¿Cómo añadir enlaces en la barra de navegación?

  • Usar una lista en la navbar con la clase navbar-right para alinear a la derecha.
  • Enlaces con routerLink hacia /login y /registro.
<!-- app.component.html (fragmento) -->
<ul class="nav navbar-nav navbar-right">
  <li><a routerLink="/login">login</a></li>
  <li><a routerLink="/registro">registro</a></li>
</ul>

¿Cómo crear e inyectar el servicio de autorización?

  • Declarar AutorizacionService con @Injectable().
  • Implementar métodos login y registro con funciones flecha y console.log.
  • Inyectar el servicio en los constructores de los componentes y llamar a los métodos con datos de prueba.
// services/autorizacion.service.ts
import { Injectable } from '@angular/core';

@Injectable()
export class AutorizacionService {
  public login = (email: string, password: string) => {
    console.log('método login');
  };

  public registro = (email: string, password: string) => {
    console.log('método registro');
  };
}
// login.component.ts (uso del servicio)
constructor(private autorizacionService: AutorizacionService) {
  this.autorizacionService.login('demo@email.com', '123456');
}

// registro.component.ts (uso del servicio)
constructor(private autorizacionService: AutorizacionService) {
  this.autorizacionService.registro('demo@email.com', '123456');
}

Con esto quedan listas las vistas, las rutas, la navbar y el service para avanzar al registro de usuarios con Firebase en el siguiente paso.

¿Tienes dudas sobre la estructura, las rutas o el servicio? Cuéntalo en los comentarios y comparte qué parte te gustaría profundizar a continuación.