예제 #1
0
        public async Task <IActionResult> GetUser(int id)
        {
            User userDb = await ContextUserDb.GetAsync(id);

            if (userDb == null)
            {
                return(NotFound("Пользователь не найден"));
            }
            return(new UserResult(userDb));
        }
예제 #2
0
        public async Task <ActionResult <string> > GetToken(AuthModel userAuth, [FromServices] IJwtSigningEncodingKey signingEncodingKey)
        {
            // Проверяем данные пользователя из запроса.
            if (!ModelState.IsValid)
            {
                _logger.LogInformation($"Неверный запрос");
                return(BadRequest(ModelState));
            }

            User userDb = await ContextDb.GetAsync(userAuth.Name);

            if (userDb == null || !Hash.Validate(userAuth.Password, userDb.Sault, userDb.HashPassword))
            {
                _logger.LogInformation($"Неверный пользователь");
                return(Unauthorized($"Данный пользователь не зарегистрирован в системе."));
            }

            // Создаем утверждения для токена.
            var claims = new Claim[] {
                new Claim(ClaimTypes.NameIdentifier, userAuth.Name),
                new Claim(ClaimTypes.Role, userDb.Role.Name)
            };

            // Генерируем JWT.
            var token = new JwtSecurityToken(
                issuer: AuthOptions.ISSUER,
                audience: AuthOptions.AUDIENCE,
                claims: claims,
                expires: DateTime.Now.Add(AuthOptions.LIFETIME),
                signingCredentials: new SigningCredentials(
                    signingEncodingKey.GetKey(),
                    signingEncodingKey.SigningAlgorithm)
                );

            string jwtToken = new JwtSecurityTokenHandler().WriteToken(token);

            _logger.LogInformation($"Для пользователя {userAuth.Name} создан токен: {jwtToken}");
            return(Ok(jwtToken));
        }