private async Task <JwtViewModel> GenerateJwtAsync(SORUser user) { var userRoles = await _userManager.GetRolesAsync(user); var jwtSettingsSection = _configuration.GetSection("JwtSettings"); var tokenHandler = new JwtSecurityTokenHandler(); var key = Encoding.ASCII.GetBytes(jwtSettingsSection.GetValue(typeof(string), "Secret").ToString()); List <Claim> claims = new List <Claim>(); if (userRoles.Count > 0) { foreach (var role in userRoles) { claims.Add(new Claim(ClaimTypes.Role, role)); } } claims.Add(new Claim(ClaimTypes.Email, user.Email)); claims.Add(new Claim(ClaimTypes.Name, user.Email)); claims.Add(new Claim(ClaimTypes.NameIdentifier, user.Id)); var claimsIdentity = new ClaimsIdentity(claims); var tokenDescriptor = new SecurityTokenDescriptor { Subject = claimsIdentity, Issuer = jwtSettingsSection.GetValue(typeof(string), "Issuer").ToString(), Expires = DateTime.Now.AddMinutes(Convert.ToDouble(jwtSettingsSection.GetValue(typeof(double), "Expire"))), SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256Signature) }; var token = tokenHandler.CreateToken(tokenDescriptor); return(new JwtViewModel { Token = tokenHandler.WriteToken(token) }); }
private async Task <bool> SetUserRolesAsync(SORUser user) { IdentityResult result; if (IsFirstUser()) { result = await _userManager.AddToRoleAsync(user, "Administrator"); } else { result = await _userManager.AddToRoleAsync(user, "User"); } return(result.Succeeded); }
public async Task <(bool result, string message)> CreateAsync(AuthViewModel authViewModel) { SORUser user = new SORUser { Email = authViewModel.Email, UserName = authViewModel.Email }; var result = await _userManager.CreateAsync(user, authViewModel.Password); if (result.Succeeded) { var roleResult = await SetUserRolesAsync(user); if (roleResult) { return(true, "Stworzono użytkownika: " + authViewModel.Email); } else { return(false, "Błąd podczas tworzenia użytkownika, nie udało się nadać ról"); } } return(false, "Błąd podczas tworzenia użytkownika: " + string.Join(" ", result.Errors.Select(err => err.Description))); }