Implementar autenticación en Angular con AWS Amplify

Authentication using AWS Amplify

Índice

Este artículo trata sobre cómo implementar Autenticación en un Angular usando AWS amplify en un periodo de tiempo muy corto. Como empresa de desarrollo especializada, ofrecemos los servicios de software a medida y un equipo dedicado a ayudar a nuestros clientes en este tipo de implantaciones.

Así que, como vimos en el artículo anterior,

AWS Amplify es un conjunto de herramientas y servicios que permite a los desarrolladores web móviles y front-end crear aplicaciones de pila completa seguras y escalables con la tecnología de AWS.

Por lo tanto, aquí vamos a explorar otro caso de uso de AWS amplificar, que es añadir la autenticación a la aplicación web angular utilizando amplificar de 2 maneras,

1. Utilizar componentes de interfaz de usuario predefinidos

2. Llamar manualmente a las API de autenticación

Requisitos previos:

  • Node.js versión 10 o posterior
  • Cuenta AWS

Crear una nueva aplicación Angular

Utiliza la CLI de Angular para arrancar una nueva aplicación Angular:

npx -p @angular/cli ng new amplify-app

? Would you like to add Angular routing? Y
? Which stylesheet format would you like to use? (your preferred stylesheet provider)

cd amplify-app

Compatibilidad con Angular 6+

Actualmente, las versiones más recientes de Angular (6+) no incluyen calces para ‘global’ o ‘process’ como se proporcionaban en versiones anteriores. Añade lo siguiente a tu archivo src/polyfills.ts para recrearlos:

(window as any).global = window;
(window as any).process = {
  env: { DEBUG: undefined },
};

Iniciar el proyecto Amplify

Ahora que tenemos una aplicación Angular en ejecución, es el momento de configurar Amplify para esta aplicación

amplify init

Enter a name for the project (amplify-auth-angular)

# All AWS services you provision for your app are grouped into an "environment"
# A common naming convention is dev, staging, and production
Enter a name for the environment (dev)

# Sometimes the CLI will prompt you to edit a file, it will use this editor to open those files.
Choose your default editor

# Amplify supports JavaScript (Web & React Native), iOS, and Android apps
Choose the type of app that you're building (javascript)

What JavaScript framework are you using (angular)

Source directory path (src)

Distribution directory path (dist)
Change from dist to dist/amplify-auth-angular

Build command (npm run-script build)

Start command (ng serve or npm start)

# This is the profile you created with the `amplify configure` command in the introduction step.
Do you want to use an AWS profile

The above given process creates a file called aws-exports.js in the src directory

Instala las dependencias de Amplify y Angular

Dentro del directorio amplify-auth-angular, instala la librería Amplify Angular y ejecuta tu aplicación:

npm install --save aws-amplify @aws-amplify/ui-angular

npm start

El paquete @aws-amplify/ui-angular es un conjunto de componentes Angular y un proveedor Angular que ayuda a integrar su aplicación con la biblioteca AWS-Amplify.

Crear servicio de autenticación en Angular

Para empezar desde cero, ejecute el siguiente comando en la carpeta raíz de su proyecto:

Si desea reutilizar un recurso de autenticación existente de AWS (por ejemplo, Amazon Cognito UserPool o Identity Pool) consulte esta sección.

amplify add auth
? Do you want to use the default authentication and security configuration? Default configuration
? How do you want users to be able to sign in? Username
? Do you want to configure advanced settings?  No, I am done.

Para desplegar el servicio, ejecute el comando push:

amplify push

Ahora, el servicio de autenticación se ha desplegado y puede empezar a utilizarlo. Para ver los servicios desplegados en su proyecto en cualquier momento, vaya a Amplify Console ejecutando el siguiente comando:

Configurar AWS Amplify en la aplicación

En el punto de entrada de tu aplicación (es decir, main.ts), importa y carga el archivo de configuración:

import { Amplify } from '@aws-amplify/core';
import { Auth } from '@aws-amplify/auth';
import awsconfig from './aws-exports';

Amplify.configure(awsconfig);
Auth.configure(awsconfig);

Importar el módulo AWS Amplify UI

Archivo: app.module.ts

import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';

/* import AmplifyUIAngularModule  */
import { AmplifyUIAngularModule } from '@aws-amplify/ui-angular';

import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from './app.component';

@NgModule({
  declarations: [
    AppComponent
  ],
  imports: [
    BrowserModule,
    AppRoutingModule,
    /* configure app with AmplifyUIAngularModule */
    AmplifyUIAngularModule
  ],
  providers: [],
  bootstrap: [AppComponent]
})
export class AppModule { }

Reemplace el contenido dentro de app.component.ts con lo siguiente:

import { Component, ChangeDetectorRef } from '@angular/core';
import { onAuthUIStateChange, CognitoUserInterface, AuthState } from '@aws-amplify/ui-components';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent {
  title = 'amplify-angular-auth';
  user: CognitoUserInterface | undefined;
  authState: AuthState;

  constructor(private ref: ChangeDetectorRef) {}

  ngOnInit() {
    onAuthUIStateChange((authState, authData) => {
      this.authState = authState;
      this.user = authData as CognitoUserInterface;
      this.ref.detectChanges();
    })
  }

  ngOnDestroy() {
    return onAuthUIStateChange;
  }
}

Reemplace el contenido dentro de app.component.html con el código html dado,

<amplify-authenticator *ngIf="authState !== 'signedin'"></amplify-authenticator>

<div *ngIf="authState === 'signedin' && user" class="App">
    <amplify-sign-out></amplify-sign-out>
    <div>Hello, {{user.username}}</div>
    <!-- This is where you application template code goes -->  
</div>

 clase

Personalización de la interfaz de usuario con Angular

Si desea personalizar los campos de formulario del componente Authenticator Sign In o Sign Up, puede hacerlo utilizando la propiedad formFieldspropiedad

En app.component.ts añade formFields como sigue:

formFields = [
      {
        type: "email",
        label: "Custom email Label",
        placeholder: "custom email placeholder",
        required: true,
      },
      {
        type: "password",
        label: "Custom Password Label",
        placeholder: "custom password placeholder",
        required: true,
      },
      {
        type: "phone_number",
        label: "Custom Phone Label",
        placeholder: "custom Phone placeholder",
        required: false,
      },
    ];
  }

Archivo: app.componen.html

<amplify-authenticator usernameAlias="email">
  <amplify-sign-up
    slot="sign-up"
    usernameAlias="email"
    [formFields]="formFields"
  ></amplify-sign-up>
  <amplify-sign-in slot="sign-in" usernameAlias="email"></amplify-sign-in>
</amplify-authenticator>

 clase

Para ver más opciones: https://docs.amplify.aws/ui/auth/authenticator/q/framework/angular#customization

Ejemplo de código Angular en Github

Si tiene algún problema en algún momento, puede consultar la aplicación completa aquí,

https://github.com/unimedia-technology/amplify-auth-angular

Unimedia Technology

Aquí en Unimedia Technology tenemos un equipo de Desarrolladores Angular que pueden desarrollar sus aplicaciones Web Single Page más desafiantes utilizando las últimas tecnologías de AWS.

Recuerde que en Unimedia somos expertos en tecnologías emergentes, así que no dude en ponerse en contacto con nosotros si necesita asesoramiento o servicios. Estaremos encantados de ayudarle.

Unimedia Technology

Su socio de desarrollo de software

Somos una consultora tecnológica de vanguardia especializada en arquitectura y desarrollo de software a medida.

Nuestros servicios

Suscríbase a nuestras actualizaciones

Mantente al día, informado y ¡demos forma juntos al futuro de la tecnología!

Lecturas relacionadas

Profundice con estos artículos

Descubra más opiniones expertas y análisis en profundidad de Unimedia en el ámbito del desarrollo de software y la tecnología.

Let’s make your vision a reality!

Simply fill out this form to begin your journey towards innovation and efficiency.

Hagamos realidad tu visión.

Sólo tienes que rellenar este formulario para iniciar tu viaje hacia la innovación y la eficiencia.