Laravel - Angular API REST
Laravel - Angular API REST
ly/3MQ4KVi
-1-
https://bit.ly/3MQ4KVi
- En app/Http/Controllers/SchoolController.php
-2-
https://bit.ly/3MQ4KVi
Petición POST
-3-
https://bit.ly/3MQ4KVi
Petición PUT
Petición Delete
-4-
https://bit.ly/3MQ4KVi
Creamos el servicio
Creamos el modelo
6. LISTAR
Primero an app.models agregar las librerías que usaremos
En el servicio:
Inyectamos Http para usar los métodos get, post put y delete
En list-school.component.ts
Creamos una variable para obtener la lista del servicio y pasar al template
y también inyectamos el servicio usando el constructor
-5-
https://bit.ly/3MQ4KVi
-6-
https://bit.ly/3MQ4KVi
7. CREAR
En el servicio necesitamos una variable que contenga el objeto school
Creamos el método
En add-school.component.ts
Inyectamos las dependencias
En add-school.component.ts
<div class="card mt-5">
<div class="card-body">
<h4 class="text-center">Registro de Escuela profesional</h4>
<form #schoolForm="ngForm" (ngSubmit)="submitForm(schoolForm)">
<input type="hidden" name="id" [(ngModel)]="schoolService.selectSchool.id">
<div class="form-group mb-3">
<input type="text" class="form-control" name="name"
[(ngModel)]="schoolService.selectSchool.name"
placeholder="Nombres">
</div>
<div class="form-group ">
<button class="btn btn-primary me-2" type="submit">
<i class="fas fa-plus-circle" ></i> Agregar
</button>
<button class="btn btn-secondary me-2" type="reset" (click)="resetForm(schoolForm)">
<i class="fas fa-sync-alt"></i> Resetear
</button>
<button class="btn btn-secondary" type="button" routerLink="/">
-7-
https://bit.ly/3MQ4KVi
8. EDITAR
En el servicio
En list-school.component.ts
En list-school.component.html
En el botón editar
En Create-school.component.ts
9. ELIMINAR
-8-
https://bit.ly/3MQ4KVi
Tymon\JWTAuth\Providers\LaravelServiceProvider::class,
La clave secreta se agrega al final del archivo .env, que juntamente con el archivo en
config/jwt.php que se creó servirán para firmar los tokens.
-9-
https://bit.ly/3MQ4KVi
'api' => [
'driver' => 'jwt',
'provider' => 'users',
],
En app/Models/User.php
-10-
https://bit.ly/3MQ4KVi
Route::post('login',[AuthController::class,'login']);
Route::post('logout',[AuthController::class,'logout']);
Route::post('refresh',[AuthController::class,'refresh']);
Route::post('register',[AuthController::class,'register']);
Route::get('me',[AuthController::class,'me']);
});
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Validator;
use App\Models\User;
if (! $token = auth()->attempt($credentials)) {
return response()->json(['error' => 'Unauthorized'], 401);
}
return $this->respondWithToken($token);
}
-11-
https://bit.ly/3MQ4KVi
if($validator->fails()){
return response()->json($validator->errors()->toJson(),400);
}
$user=User::create([
'name' => $request->name,
'email' => $request->email,
'password' => bcrypt($request->password)
]);
return response()->json([
'message'=>'User successfully registered',
'user'=>$user
],201);
}
}
b. Loguearse
-12-
https://bit.ly/3MQ4KVi
Si el usuario existe en la base de datos nos devuelve el token, tipo de token y tipo de
expiración
c. Accedemos a la ruta de perfil de usuario que está protegida
-13-
https://bit.ly/3MQ4KVi
EN EL FRONTEND
Creamos los componentes:
ng g component login/login
ng g component components/dashboard
Creamos un servicio:
ng g service services/auth
En auth.service.ts
API="http://127.0.0.1:8000/api/auth";
loginEmail(email:string, pass:string){
return this.http.post(this.API+"/login",{ email:email,password:pass });
}
logout() :void {
localStorage.setItem('isLoggedIn','false');
localStorage.removeItem('token');
}
En login.component.ts
public email:string="";
public password:string="";
onSubmitLogin(){
this.authService.loginEmail(this.email,this.password).subscribe((token:any)=>{
console.log(token.access_token);
localStorage.setItem('isLoggedIn',"true");
localStorage.setItem('token', token.access_token);
//this.toastr.success('Bienvenido: '+this.email);
this.router.navigate(['/dashboard']);
},err=>{
console.log("error: "+err);
}
);
}
En login.component.html
<main class="form-signin text-center mt-5">
<form (submit)="onSubmitLogin()">
<img class="mb-4" src="assets/bootstrap-logo.svg" alt="" width="72" height="57">
<h1 class="h3 mb-3 fw-normal">Please sign in</h1>
<div class="form-floating">
<input type="email" class="form-control" name="email" [(ngModel)]="email"
-14-
https://bit.ly/3MQ4KVi
placeholder="[email protected]">
<label for="floatingInput">Email address</label>
</div>
<div class="form-floating">
<input type="password" class="form-control" name="password" [(ngModel)]="password"
placeholder="Password">
<label for="floatingPassword">Password</label>
</div>
En app-routing.module.ts
En app.component.ts
logout() {
this.authservice.logout();
this.router.navigate(['/']);
}
constructor(private http:HttpClient) { }
baseurl='http://127.0.0.1:8000/api/auth/';
//metodo GET
GetSchools():Observable<School>{
return this.http.get<School>(this.baseurl+'schools/',{headers:this.reqHeader});
}
13. GUARDS
-15-
https://bit.ly/3MQ4KVi
En guards/auth.guard.ts
if (this.authservice.isLoggedIn()) {
return true;
}
// navigate to login page as user is not authenticated
this.router.navigate(['/']);
return false;
}
14.
-16-