0% found this document useful (0 votes)
21 views12 pages

Proyecto NET9 Angular19 Final

The document outlines an ASP.NET Core application structure that includes authentication and product management functionalities. It features an AuthController for handling user login, a ProductsController for managing product data, and various related classes such as LoginRequest and Product. Additionally, it includes Angular components and services for user authentication and session management.

Uploaded by

Diego Ramirez
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
21 views12 pages

Proyecto NET9 Angular19 Final

The document outlines an ASP.NET Core application structure that includes authentication and product management functionalities. It features an AuthController for handling user login, a ProductsController for managing product data, and various related classes such as LoginRequest and Product. Additionally, it includes Angular components and services for user authentication and session management.

Uploaded by

Diego Ramirez
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 12

Program.

cs
using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Cors.Infrastructure;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.IdentityModel.Tokens;
using System.Text;

var builder = WebApplication.CreateBuilder(args);


var key = Encoding.UTF8.GetBytes("SuperSecretKey123!");

// Configurar CORS
builder.Services.AddCors(options =>
{
optio...
AuthController.cs
using Microsoft.AspNetCore.Mvc;
using Microsoft.IdentityModel.Tokens;
using System.IdentityModel.Tokens.Jwt;
using System.Security.Claims;
using System.Text;

[ApiController]
[Route("api/auth")]
public class AuthController : ControllerBase
{
[HttpPost("login")]
public IActionResult Login([FromBody] LoginRequest request)
{
if (request.Username == "admin" && request.Password == "adminpass")
{
var token = GenerateJwtToken("admin");
retur...
ProductsController.cs
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;

[ApiController]
[Route("api/products")]
public class ProductsController : ControllerBase
{
private readonly AppDbContext _context;

public ProductsController(AppDbContext context)


{
_context = context;
}

[HttpGet]
[Authorize(Policy = "UserOrAdmin")]
public async Task<ActionResult<PaginatedResult>> GetProducts([FromQuery] int page = 1, [FromQuery] int pageSi...
Product.cs
public class Product(int Id, string Name, decimal Price)
{
public int Id { get; set; } = Id;
public string Name { get; set; } = Name;
public decimal Price { get; set; } = Price;
}
LoginRequest.cs
public class LoginRequest
{
public string Username { get; set; } = string.Empty;
public string Password { get; set; } = string.Empty;
}
AppDbContext.cs
using Microsoft.EntityFrameworkCore;

public class AppDbContext(DbContextOptions<AppDbContext> options) : DbContext(options)


{
public DbSet<Product> Products => Set<Product>();
}
AuthService.ts
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { Router } from '@angular/router';

@Injectable({ providedIn: 'root' })


export class AuthService {
private tokenKey = 'authToken';
private roleKey = 'userRole';

constructor(private http: HttpClient, private router: Router) {}

login(username: string, password: string) {


return this.http.post<{ token: string; role: string }>('https://localhost:5001/api/auth/login', { username, password })
...
AuthGuard.ts
import { Injectable } from '@angular/core';
import { CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot, Router } from '@angular/router';
import { AuthService } from '../services/auth.service';

@Injectable({ providedIn: 'root' })


export class AuthGuard implements CanActivate {
constructor(private authService: AuthService, private router: Router) {}

canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {


if (this.authService.isAuthenticated()) {
return tru...
HttpInterceptor.ts
import { Injectable } from '@angular/core';
import { HttpEvent, HttpHandler, HttpInterceptor, HttpRequest, HttpErrorResponse } from '@angular/common/http';
import { Observable, throwError } from 'rxjs';
import { catchError } from 'rxjs/operators';
import { AuthService } from '../services/auth.service';
import { Router } from '@angular/router';

@Injectable()
export class AuthInterceptor implements HttpInterceptor {
constructor(private authService: AuthService, private router: Router) {}

intercept(req: ...
LoginComponent.ts
import { Component } from '@angular/core';
import { FormBuilder, FormGroup } from '@angular/forms';
import { AuthService } from '../services/auth.service';
import { CommonModule } from '@angular/common';

@Component({
selector: 'app-login',
standalone: true,
imports: [CommonModule],
templateUrl: './login.component.html',
styleUrls: ['./login.component.css']
})
export class LoginComponent {
loginForm: FormGroup;

constructor(private fb: FormBuilder, private authService: AuthService) {


t...
LoginComponent.html
<div class="container d-flex justify-content-center align-items-center vh-100">
<div class="card p-4 w-50 shadow">
<h2 class="text-center mb-4">Iniciar Sesión</h2>
<form [formGroup]="loginForm" (ngSubmit)="login()">
<div class="mb-3">
<label for="username" class="form-label">Usuario</label>
<input id="username" formControlName="username" class="form-control" placeholder="Usuario" required>
</div>
<div class="mb-3">
<label for="password" class="form-label">Con...
LoginComponent.css
body {
background-color: #f8f9fa;
}

.container {
height: 100vh;
}

.card {
max-width: 400px;
width: 100%;
border-radius: 10px;
box-shadow: 0 4px 10px rgba(0, 0, 0, 0.1);
}

.btn-primary {
background-color: #007bff;
border: none;
}

.btn-primary:hover {
background-color: #0056b3;
}

You might also like