public async Task <bool> UpdatePasswordIsSuccessful(string token) { Token _token = await context.Tokens.FirstOrDefaultAsync(t => t.Value == token); if (_token != null && _token.Action == "repa") { User user = await context.Users.FirstOrDefaultAsync(u => u.Id == _token.UserId); if (user != null) { string password = PasswordManager.GenerateToken(); string salt = PasswordManager.GenerateSalt(); string hash = PasswordManager.GenerateHash(password, salt); user.PasswordHash = hash; user.Salt = salt; user.LastChanges = DateTime.Now; await EmailManager.SendMessageAsync(user.Email, $"Восстановление пароля проведено успешно!<br>" + $"Ваш новый пароль: {password}<br>" + "Вы можете сменить его на любой другой в любое время в вашем" + " <a href=\"" + AppConfig.AppUrl + "/Account/Cabinet\"> личном кабинете </a>."); context.Tokens.Remove(_token); await context.SaveChangesAsync(); return(true); } } return(false); }
public async Task <ServiceResult> RegistrationAsync(RegistrationViewModel model) { ServiceResult result = new ServiceResult() { ErrorMessages = new List <string>(), Successful = false }; if (await EmailIsUniq(model.Email)) { if (await LoginIsUniq(model.Login)) { User user = new User() { ConfirmEmail = false, Email = model.Email, Login = model.Login, Firstname = model.FirstName, LastChanges = DateTime.Now, Lastname = model.LastName, Salt = PasswordManager.GenerateSalt(), Role = "User" }; user.PasswordHash = PasswordManager.GenerateHash(model.Password, PasswordManager.MainSalt + user.Salt); context.Users.Add(user); await context.SaveChangesAsync(); Token token = new Token() { GenerationDate = DateTime.Now, UserId = user.Id, Value = PasswordManager.GenerateToken(15), Action = "coem" }; context.Tokens.Add(token); await context.SaveChangesAsync(); /*await EmailManager.SendMessageAsync(user.Email, * $"Благодарим за регистрацию." + * $" Для подтверждения эл. почты перейдите по" + * $" <a href=\"https://{AppConfig.AppUrl}/Account/ConfirmEmail?token={token.Value}\"> ссылке </a>", * "Shpilka регистрация");*/ string directoryName = AppConfig.UsersPath + "/" + user.Id.ToString(); Directory.CreateDirectory(directoryName); result.Successful = true; } else { result.ErrorMessages.Add("Пользователь с таким логином уже зарегистрирован"); } } else { result.ErrorMessages.Add("Пользователь с такой электронной почтой уже зарегистрирован"); } return(result); }
public async Task <AuthenticateUser> LoginAsync(LoginViewModel model) { AuthenticateUser auth = null; User user = await context.Users.FirstOrDefaultAsync(u => u.Login == model.Login); if (user != null && PasswordManager.GenerateHash(model.Password, user.Salt) == user.PasswordHash) { auth = new AuthenticateUser() { Id = user.Id, Firstname = user.Firstname, Lastname = user.Lastname, Login = user.Login }; } return(auth); }
public string GenerateHash(string password, string salt) { string hash = passwordManager.GenerateHash(password, salt); return(hash); }