Ignore:
Timestamp:
09/09/26 03:30:35 (3 weeks ago)
Author:
mmilevski <markomilevski3@…>
Branches:
main
Children:
6886d95
Parents:
595d2e5
Message:

Changed controllers to include transactions, Implemented password hashing.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • KernelRecordsMVC.Web/Controllers/AccountController.cs

    r595d2e5 r1dcdb2c  
    66using Microsoft.AspNetCore.Mvc;
    77using Microsoft.EntityFrameworkCore;
     8using Microsoft.AspNetCore.Identity;
    89
    910namespace KernelRecordsMVC.Web.Controllers;
    … …  
    1213{
    1314    private readonly KernelRecordsContext _context;
    14 
    15     public AccountController(KernelRecordsContext context)
     15    private readonly IPasswordHasher<User> _passwordHasher;
     16
     17    public AccountController(KernelRecordsContext context,IPasswordHasher<User> passwordHasher)
    1618    {
    1719        _context = context;
     20        _passwordHasher = passwordHasher;
    1821    }
    1922
    … …  
    5962        }
    6063
    61         var user = new User
    62         {
    63             Email = model.Email,
    64             Username = model.Username,
    65 
    66             // TODO:
    67             // Replace with password hashing later.
    68             Password = model.Password,
    69 
    70             DateCreated = DateTime.Today,
    71             ShippingAddress = model.ShippingAddress,
    72             TelephoneNumber = model.TelephoneNumber
    73         };
    74 
    75         _context.Users.Add(user);
    76 
    77         _context.SaveChanges();
    78 
    79 
    80         // Every normal registered user is a Consumer.
    81         var consumer = new Consumer
    82         {
    83             UserId = user.UserId,
    84             PointsCollected = 0
    85         };
    86 
    87         _context.Consumers.Add(consumer);
    88 
    89         _context.SaveChanges();
    90 
    91         return RedirectToAction(nameof(Login));
     64        using var transaction =
     65            _context.Database.BeginTransaction();
     66
     67        try
     68        {
     69            var user = new User
     70            {
     71                Email = model.Email,
     72                Username = model.Username,
     73                DateCreated = DateTime.Today,
     74                ShippingAddress = model.ShippingAddress,
     75                TelephoneNumber = model.TelephoneNumber
     76            };
     77
     78            user.Password =
     79                _passwordHasher.HashPassword(
     80                    user,
     81                    model.Password);
     82
     83            _context.Users.Add(user);
     84            _context.SaveChanges();
     85
     86            var consumer = new Consumer
     87            {
     88                UserId = user.UserId,
     89                PointsCollected = 0
     90            };
     91
     92            _context.Consumers.Add(consumer);
     93            _context.SaveChanges();
     94
     95            transaction.Commit();
     96
     97            return RedirectToAction(nameof(Login));
     98        }
     99        catch
     100        {
     101            transaction.Rollback();
     102            throw;
     103        }
    92104    }
    93105
    … …  
    118130        var user = _context.Users
    119131            .FirstOrDefault(x =>
    120                 x.Username == model.Username &&
    121                 x.Password == model.Password);
     132                x.Username == model.Username);
    122133
    123134        if (user == null)
     135        {
     136            ModelState.AddModelError(
     137                "",
     138                "Invalid username or password.");
     139
     140            return View(model);
     141        }
     142
     143        var result =
     144            _passwordHasher.VerifyHashedPassword(
     145                user,
     146                user.Password,
     147                model.Password);
     148
     149        if (result == PasswordVerificationResult.Failed)
    124150        {
    125151            ModelState.AddModelError(
Note: See TracChangeset for help on using the changeset viewer.