Skip to content
Freewebsolution
Menu
  • Home
  • angular
  • php
  • guide
  • laravel
  • react
  • corsi
Freewebsolution
Menu
laravel e angular

Angular e Laravel: realizzare un sistema di autenticazione

Posted on 11 Novembre 20205 Giugno 2022 by lucio
Category: angular, blog, laravel
12.370 views Tempo di lettura: 75 minuti

Angular e Laravel: modifica di un user

Nelle precedenti sezioni siamo riusciti ad autenticarci, quindi effettuare l’accesso. Comunque il nostro CRUD ancora è incompleto, quindi cosa aspettate? Implementiamolo!!

Iniziamo con il dare la possibilità agli utenti di modificare gli user presenti nel pannello amministrativo, realizzate il component:

ng g c admin/admin-user-edit -is

bene ora non ci resta che aggiungere il parametro relativo alla route.

Parametri del percorso

I parametri di percorso ci consentono di passare valori dal nostro URL al nostro componente in modo da poter modificare dinamicamente il contenuto della nostra vista. Ad esempio, se volessimo modificare l’ user 1 , potremmo visitare /admin/ user/edit/1 . Se vogliamo modificare l’ immagine 2 , possiamo visitare / admin / images / edit / 2 .

Come vedi, sostituendo qualsiasi numero nel nostro URL, possiamo visualizzare un contenuto di visualizzazione diverso.

Suggerimento: se stai lavorando con Laravel o altri framework, questo dovrebbe essere un concetto di base, giusto?

In questa sezione impareremo come visualizzare pagine diverse (visualizza contenuto) in base all’URL.

Innanzitutto, apri admin/admin.routes.ts e aggiungi questo percorso:

export const adminRoutes: Routes = [
  { path: '', component: HomeAdminComponent},
  {path: 'users', component: ListAdminComponent},
  { path: 'users/create', component: AdminUserCreateComponent},
  { path: 'users/edit/:id', component: AdminUserEditComponent }
];

ricordati di importarlo:

import {AdminUserEditComponent} from './admin-user-edit/admin-user-edit.component';

Come vedi, usiamo users/edit/:id . Il ‘:’ indica che si tratta di un parametro di percorso, e Angular dovrebbe ottenere questo id dall’URL.

Quindi, come otteniamo questo parametro di percorso (id)?

Apri admin-user-edit.component.ts e trova:

export class AdminUserEditComponent implements OnInit {

aggiungi di seguito:

id: any;
params: any;

Creiamo due variabili: id e params .

Nota: puoi usare nomi diversi se lo desideri.

Dopodiché, inseriamo ActivatedRoute da @ angular/router nel nostro componente.

constructor(private activatedRoute: ActivatedRoute) { }

Non dimenticare di importare ActivateRoute :

import {ActivatedRoute} from '@angular/router';

Ecco come otteniamo l’ id della pagina:

ngOnInit(): void {
  this.params = this.activatedRoute.params.subscribe(params => this.id = params.id);
}

Fondamentalmente, quando si usa activRoute , i parametri vengono inseriti in un Observable . Ci iscriviamo a quell’osservabile utilizzando:

this.activatedRoute.params.subscribe()

Quando il percorso cambia, lo sapremo immediatamente. Possiamo prendere il valore (che è l’ id ) usando params.id e assegnarlo alla nostra variabile id :

params => this.id = params.id

Inoltre, per evitare perdite di memoria, dovremmo annullare la sottoscrizione dei parametri quando il nostro componente viene distrutto.

Trova:

ngOnInit(): void {
  this.params = this.activatedRoute.params.subscribe(params => this.id = params.id);
}

aggiungi sotto:

ngOnDestroy():void {
  this.params.unsubscribe();
}

Trova:

export class AdminImageEditComponent implements OnInit {

aggiorna a:

export class AdminImageEditComponent implements OnInit, OnDestroy {

importalo:

import {Component, OnInit, OnDestroy} from '@angular/core';

Ecco il nuovo admin/user-image-edit.component.ts :

import {Component, OnDestroy, OnInit} from '@angular/core';
import {ActivatedRoute} from '@angular/router';

@Component({
  selector: 'app-admin-user-edit',
  template: `
    <p>
      admin-user-edit works!
    </p>
  `,
  styles: [
  ]
})
export class AdminUserEditComponent implements OnInit, OnDestroy {
  id: any;
  params: any;

  constructor(private activatedRoute: ActivatedRoute) { }

  ngOnInit(): void {
    this.params = this.activatedRoute.params.subscribe(params => this.id = params.id);
  }
  ngOnDestroy(): void {
    this.params.unsubscribe();
  }

}

Infine  trova:

<p>
  admin-user-edit works!
</p>

Aggiungi sotto:

<p>The id of this page is: {{id}}.</p>

Usiamo {{id}}per visualizzare l’id della pagina.

A questo punto, visitando http:// localhost:4200/admin/users/edit/2 , dovremmo vedere:

angular crud whit laravel

Prova a cambiare l’ID dell’URL!

Quando abbiamo l’ id , possiamo inviare una richiesta alla nostra API ed ottenere i dati relativi ad essa.

Ottenere un signolo utente con  Laravel

Non abbiamo ancora un’API per ottenere un singolo user, quindi creiamola.

Apri UserController.php e aggiorna il metodo show come segue:

public function show($id)
{
    $user = User::find($id);

    if(!$user){
        return Response::json([
            'error' => [
                'message' => "Cannot find the image."
            ]
        ], 404);
    }

    return Response::json($user, 200);
}

Innanzitutto, troveremo l’user in base al suo ID:

$user = User::find($id);

Se non riusciamo a trovarlo, ti invieremo un messaggio di errore:

if(!$user){
    return Response::json([
        'error' => [
            'message' => "Cannot find the image."
        ]
    ], 404);
}

Se l’user viene trovato, dovremmo vedere la risposta 200 e i dati dello stesso:

return Response::json($user, 200);

Aggiornare un User con Laravel

Come avrai intuito, abbiamo anche bisogno di un’API per aggiornare un User.

Apri UserController.php e aggiorna il metodo Update:

public function update(Request $request)
   {
       if ((!$request->name) || (!$request->email) || (!$request->password)) {

           $response = Response::json([
               'message' => 'Please enter all required fields'
           ], 422);
           return $response;
       }

       $user = User::find($request->id);

       if($user){
           return Response::json([
               'message' => "Cannot find the image."
           ], 404);
       }

       $user->name = trim($request->name);
       $user->email = trim($request->email);
       $user->password= bcrypt($request->title);
       $user->save();

       $message = 'Your image has been updated successfully';

       $response = Response::json([
           'message' => $message,
           'data' => $user,
       ], 201);

       return $response;
   }

Proprio come quando creiamo un user, controlliamo prima la richiesta per assicurarci che tutte le informazioni siano corrette:

if ((!$request->name) || (!$request->email) || (!$request->password)) {

    $response = Response::json([
        'message' => 'Please enter all required fields'
    ], 422);
    return $response;
}

Dopodiché, troveremo l’User, in base all’ID richiesto :

$user = User::find($request->id);

Se non riusciamo a trovare l’User, restituiremo un errore:

if($user){
    return Response::json([
        'message' => "Cannot find the image."
    ], 404);
}

Se tutto va bene, aggiorneremo l’immagine e restituiremo la risposta 201 :

$user->name = trim($request->name);
$user->email = trim($request->email);
$user->password= bcrypt($request->title);
$user->save();

$message = 'Your image has been updated successfully';

$response = Response::json([
    'message' => $message,
    'data' => $user,
], 201);

return $response;

Angular: Ottenere un singolo Utente

Quando si modifica un’ utente, dobbiamo inviare una richiesta al nostro backend per ottenere i dati dello stesso, in modo da poter visualizzare le informazioni sul nostro modulo di modifica.

Innanzitutto, aggiungiamo un metodo getUser nel nostro  :

services/user.services.ts

getUser(id: any): Observable<any> {
  return this.http.get(`${API}${id}`)
    .pipe(map((response) => response));
}

Questo metodo è semplice, invia una richiesta a http://127.0.0.1:8000/api/v1/users/USERID per ottenere i dati dello stesso.

Quindi, apri admin-user-edit.component.ts e trova:

this.params = this.activatedRoute.params.subscribe(params => this.id = params['id']);

aggiungi sotto:

this.userService.getUser(this.id).subscribe(
  data => {
    console.log(data);
  },
  error =>  console.log(error));

importa:

import {UserService} from '../../services/user.service';

iniettalo nel costruttore:

constructor(private activatedRoute: ActivatedRoute, private userService: UserService) { }

ora provalo su http://localhost:4200/admin/users/edit/1

autenticazione laravel angular

Suggerimento: invece di mostrare un modulo Modifica user , possiamo utilizzare questa tecnica per mostrare un singolo user quindi il suo dettaglio.

È ora di utilizzare i dati per visualizzare i valori predefiniti dei campi!

Introduzione al two-way binding

Cos’è il two-way binding?

Secondo W3Schools:

two-way binding(collegamento a due vie). Il data binding in Angular è la sincronizzazione tra il modello e la vista. Quando i dati nel modello cambiano, la vista riflette la modifica e quando i dati nella vista cambiano, anche il modello viene aggiornato.

In poche parole, possiamo creare un modello user ed  associarlo al modulo. Quando modifichiamo i dati del modello  , il nostro modulo verrà aggiornato e quando lo modificheremo , verrà aggiornato anche il nostro modello User .

Non preoccuparti se non hai ancora capito il concetto. Ti mostrerò presto come utilizzare l’associazione a due vie.

Innanzitutto, apri admin-user-edit.component.ts e trova:

constructor(private activatedRoute: ActivatedRoute, private userService: UserService) { }

aggiungi sopra:

user = new User('id', 'name' , 'email' , 'password');

assiurati di importare:

import {User} from '../../models/user';

Ecco come assegniamo i nostri dati richiesti all’ User che abbiamo appena creato:

Trova:

this.userService.getUser(this.id).subscribe(
  data => {
    console.log(data);

aggiungi sotto:

this.user.name = data[`name`];
this.user.email = data[`email`];
this.user.password = data[`password`];

Procediamo per associare il nostro modello user al modulo. Apri admin-user-edit.component.ts , trova:

<p>
  admin-user-edit works!
</p>
<p>The id of this page is: {{id}}.</p>

ed aggiornalo come segue:

<div class="container">
      <div class="col-md-12">
        <div>
          <a [routerLink]="['/admin/']" class="btn btn-light"> Back</a>
        </div>
      </div>

      <div class="col-md-12">
        <div class="card card-body bg-light">
          <form novalidate class="form-horizontal" (ngSubmit)="updateUser(user)" #editUserForm="ngForm">
            <h3 class="card-title">Updating: {{user.name}}</h3>
            <div class="form-group">
              <label for="name" class="col-lg-2 control-label">Name</label>
              <div class="col-lg-12">
                <input
                  type="text"
                  class="form-control"
                  id="name"
                  name="name"
                  placeholder="inserisci il nome"
                  [(ngModel)]="user.name"
                  #name="ngModel"
                  required minlength="3">
                <div *ngIf="name.errors?.required && name.touched" class="alert alert-danger">
                  Name is required
                </div>
                <div *ngIf="name.errors?.minlength && name.touched" class="alert alert-danger">
                  Minimum of 3 characters
                </div>
              </div>
            </div>
            <div class="form-group">
              <label for="email" class="col-lg-2 control-label">Email</label>
              <div class="col-lg-12">
                <input
                  type="email"
                  class="form-control"
                  id="email" name="email"
                  placeholder="Email"
                  [(ngModel)]="user.email"
                  #email="ngModel" required
                  pattern="[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,4}$">
                <div *ngIf="email.errors?.required && email.touched" class="alert alert-danger">
                  Email is required
                </div>
                <div *ngIf="email.errors?.pattern && email.touched" class="alert alert-danger">
                  This is not a valid Email!!!
                </div>
              </div>
            </div>
            <div class="form-group">
              <label for="title" class="col-lg-2 control-label">Password</label>
              <div class="col-lg-12">
                <input
                  type="password"
                  class="form-control"
                  id="password"
                  name="password"
                  placeholder="Inserisci la Password"
                  [(ngModel)]="user.password"
                  #password="ngModel" required
                  [pattern]="selectedPattern">
                <div *ngIf="password.errors?.required" class="alert alert-danger">
                  Password obbligatoria
                </div>
                <div *ngIf="password.errors&&password.errors.pattern" class="alert alert-danger">
                  {{errorMgs}}
                </div>
              </div>
            </div>
            <div class="form-group">
              <label for="title" class="col-lg-2 control-label">Confirm Password</label>
              <div class="col-lg-12">
                <input
                  type="password"
                  class="form-control"
                  id="confirmPassword"
                  name="confirmPassword"
                  placeholder="Inserisci la Password"
                  [(ngModel)]="confirmPassword"
                  #password="ngModel" required>
                <div *ngIf="password.touched && confirmPassword !== user.password" class="alert alert-danger">
                  Le password non corrispondono!!!
                </div>
              </div>
            </div>
            <div class="form-group">
              <div class="col-lg-12">
                <a [routerLink]="['/admin/']" class="btn btn-light"> Cancel</a>
                <button type="submit" class="btn btn-primary" [disabled]="editUserForm.invalid">Update</button>
              </div>
            </div>
          </form>
        </div>
      </div>
    </div>

 

in questo caso utilizzo un form driven-template ed effettuo anche qui i controlli di prassi relativi all’inserimento di un corretto formato email, una password dove si chiede un certo formato (numeri, lettere maiuscole, minuscole ed almeno un carattere speciale).

Infine effettuo un confronto delle due password.

ora implementate il metodo updateUser() come segue:

updateUser(user): void {
  this.userService.updateUser(user)
    .subscribe(
      response  => {
        this.user = response;
        console.log(this.user);
      },
      error =>  console.log(error));
}

quindi aprite services/user-service.ts ed aggiungete il metodo updateUser come segue:

// UPDATE USER
updateUser(user: User): Observable<any> {
const url = `${API}${user[`id`]}`;
return this.http.put(`${url}`, user)
.pipe(
map((response) => response),
catchError(this.errorHandler)
);
}

Se volete Approfondire le conoscenze su Laravel potete seguire il  corso completo su Udemy sempre scontato a 9.99/12.99 € , inoltre, nel momento in cui non foste soddisfatti, avete la possibilità di ottenere il rimborso completo dello stesso entro 30 giorni dalla data di acquisto!

Se volete Approfondire le conoscenze su Angular potete seguire il  corso completo su Udemy sempre scontato a 9.99/12.99 € , inoltre, nel momento in cui non foste soddisfatti, avete la possibilità di ottenere il rimborso completo dello stesso entro 30 giorni dalla data di acquisto!

Potrebbero interessarti:

  • Autenticazione con React ed il jwt di laravel 9
    Autenticazione con React ed il jwt di laravel 9
  • laravel-react
    Autenticazione React con il jwt di laravel 9
  • applicazione stock exchange con React
    Realizzare un'applicazione Stock Exchange con React
  • impostare i cron jobs con laravel
    Impostare i cron jobs con Laravel 10
Pages: 1 2 3 4 5 6 7 8 9

Lucio Ticali

Lucio Ticali - Insegnante su Udemy

Hi, I'm Lucio Ticali, author of this blog. I am a Full stack developer and Udemy Instructor with over 20 years of experience in the Information Technology sector.

Ultime da Freeweb

  • Creare un’applicazione di e-commerce con Laravel e Stripe
  • Come integrare Stripe con Laravel 11
  • Realizza il gioco del solitario con React e Laravel: Parte 1
  • Creare Interfacce Dinamiche con Laravel 11 e Livewire 3: Guida Passo-Passo
  • Come creare una Progressive Web App (PWA) con Laravel 11

Corsi da non perdere

Guida a git e GitHub

€ 9.99 / €12.99 corso base di git: impara a tenere traccia del tuo codice

Ebook da non perdere

Laravel 11 dall'idea al codice

€ 9.99 / €21.99 laravel 11: dall'idea al codice

©Copyright 2025 - Freewebsolution. All rights reserved, Lucio Ticali Lucio ticali Udemy instructor instructor. Privacy-Informativa cookies