Example #1
0
        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)
            });
        }
Example #2
0
        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);
        }
Example #3
0
        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)));
        }