예제 #1
0
        /// <summary>
        /// Метод аутентификации, который возвращает JWT токен (При каждой аутентификации генерируется новый JWT токен)
        /// </summary>
        /// <param name="username">Логин</param>
        /// <param name="password">Пароль</param>
        /// <returns>Возвращает RefreshToken</returns>
        public async Task <RefreshTokens> Authenticate(string username, string password)
        {
            // Ищем пользователя по email
            User user = await _userManager.FindByEmailAsync(username);

            // Если пользователь не найден, верни ошибку о том, что такого юзера нет
            if (user == null)
            {
                return(null);
            }

            // Иначе, пользователь найден, тогда надо сбросить куки
            var removed = await UnLoginUser(user);

            // Далее проходим авторизацию
            var result = await _signInManager.CheckPasswordSignInAsync(user, password, false);

            // Если авторизация не прошла успешно, то верни null
            if (!result.Succeeded)
            {
                return(null);
            }

            // Теперь генерируем данные для RefreshToken'a
            var encodedJwt = await GenerateJWT(user);  // JWT AcessToken

            var RefreshToken = GenerateRefreshToken(); // RefreshToken



            RefreshTokens token = new RefreshTokens {
                TokenAcess = encodedJwt, IdUser = user.Id, TokenRefresh = RefreshToken, DateLifeStart = DateTime.Now, DateLifeEnd = DateTime.Now.AddDays(10), IsActive = true
            };

            // Добавляем этот токен в хранилище RefreshToken'ов
            var added = await tokensService.AddToken(token);


            return(token); // Возвращаем токен
        }