public async Task <Response> Handle(Request request, CancellationToken cancellationToken) { var user = await _context.Users .Include(x => x.Roles) .SingleOrDefaultAsync(x => x.Username == request.Username); if (user == null) { throw new Exception(); } if (!ValidateUser(user, _passwordHasher.HashPassword(user.Salt, request.Password))) { throw new Exception(); } _tokenBuilder .AddUsername(user.Username) .AddOrUpdateClaim(new System.Security.Claims.Claim(Constants.ClaimTypes.UserId, $"{user.UserId}")); foreach (var role in user.Roles) { _tokenBuilder.AddOrUpdateClaim(new System.Security.Claims.Claim(Constants.ClaimTypes.Role, role.Name)); } return(new(_tokenBuilder.Build(), user.UserId)); }
public async Task <Response> Handle(Request request, CancellationToken cancellationToken) { var user = await _context.Users.SingleOrDefaultAsync(x => x.Username == request.Username); if (user == null) { throw new Exception(); } if (!ValidateUser(user, _passwordHasher.HashPassword(user.Salt, request.Password))) { throw new Exception(); } _tokenBuilder .AddUsername(user.Username); return(new(_tokenBuilder.Build(), user.UserId)); }
public async Task <Response> Handle(Request request, CancellationToken cancellationToken) { var userAccountRoles = await(from u in _context.Users join a in _context.Accounts on u.UserId equals a.UserId join rr in _context.Users.SelectMany(x => x.Roles) on true equals true join r in _context.Roles on rr.RoleId equals r.RoleId where u.Username == request.Username select new { User = u, Role = r, Account = a }).ToListAsync(); var user = userAccountRoles.FirstOrDefault().User; var account = userAccountRoles.First().Account; if (user == null) { throw new Exception(); } if (!ValidateUser(user, _passwordHasher.HashPassword(user.Salt, request.Password))) { throw new Exception(); } foreach (var role in userAccountRoles.Select(x => x.Role)) { _tokenBuilder.AddOrUpdateClaim(new Claim(Constants.ClaimTypes.Role, role.Name)); } _tokenBuilder .AddUsername(user.Username) .AddOrUpdateClaim(new Claim(Constants.ClaimTypes.AccountId, $"{account.AccountId}")) .AddOrUpdateClaim(new Claim(Constants.ClaimTypes.UserId, $"{account.UserId}")); return(new(_tokenBuilder.Build(), user.UserId)); }