public async Task <AuthResult> RegisterAsync( string userName, string email, string password, string fingerPrint, string longSession) { var isSignIn = await signInManager.PasswordSignInAsync(userName, password, false, false); if (isSignIn.Succeeded) { throw new ApiError(new ServerException("Пользователь с таким логином уже зарегистрирован")); } var user = new User() { UserName = userName, Email = email }; bool isNeedConfirmEmail = emailSenderService.IsNeedConfirm(); if (isNeedConfirmEmail) { var isEmailUnique = await userManager.Users.FirstOrDefaultAsync(x => x.Email == email); if (isEmailUnique != null) { throw new ApiError(new ServerException("Пользователь с таким email уже зарегистрирован")); } } var resultCreate = await userManager.CreateAsync(user, password); IdentityRole role; if (await userManager.Users.CountAsync() == 1) { role = await roleManager.Roles.FirstOrDefaultAsync(x => x.Name == "Admin"); } else { role = await roleManager.Roles.FirstOrDefaultAsync(x => x.Name == "User"); } await userManager.AddToRoleAsync(user, role.Name); var registeredUser = await userManager.Users.FirstOrDefaultAsync(x => x.UserName == userName); await userProvider.CreateLongSessionAsync(new LongSession() { UserId = registeredUser.Id, FingerPrint = fingerPrint, Value = longSession }); if (isNeedConfirmEmail) { string emailToken = await jwtService.GenereteEmailToken(registeredUser); await emailSenderService.SendEmailAsync(new AuthMailInfo(emailToken), registeredUser.Email, MailTempleteNames.AuthMailTemplateName); } List <string> roles = new List <string>() { role.Name }; return(new AuthResult() { UserName = userName, Roles = roles, AccessToken = jwtService.GenereteJwtToken(userName, registeredUser, new List <string>() { role.Name }), RefreshToken = longSession }); }