Забыли пароль на ASP.NET Core
Есть веб-приложение бэкендом на ASP.NET Core. Надо добавить туда возможность восстановить пароль.
Нужен какой-то компонент, который может создать одноразовый временный код восстановления пароля для определенного пользователя, а потом проверить, был ли этот код создан для этого пользователя. Есть такой готовый класс?
Если нет, то как такое реализовать? Конкретно непонятно, как сделать коды действительно временными, т.е. чтобы они уничтожались через заданное время, а не хранились пока программа выполняется.
Сейчас в моем приложении пользователи создаются так:
await this.Repository.RegisterContact(login, password, role, name, email, phone, post, partnerId);
Проверка пароля при авторизации делается так:
var contactData = await this.Repository.AuthorizeWithPartner(login, password);
У класса, к которому относится this.Repository есть методы:
public async ValueTask<bool> RegisterContact(
string login,
string password,
int role,
string name,
string email,
string phone,
string position,
int partnerId)
{
login = login.ToLower().Trim();
if (this.contacts.Any(x => x.Login.ToLower() == login))
{
return false;
}
var contact = new Contact
{
Login = login,
Password = MyHelper.GetMd5(password),
Role = role,
Name = name,
Email = email,
Phone = phone,
Position = position,
PartnerId = partnerId
};
this.AddContact(contact);
return true;
}
public async ValueTask<AuthContactData> AuthorizeWithPartner(string login, string password)
{
login = login.ToLower();
password = MyHelper.GetMd5(password);
var result = this.Contacts.Where(x =>
x.Login.ToLower() == login
&& x.Password == password)
.Select(x => new AuthContactData
{
Contact = x,
PartnerName = x.Partner.Name
})
.FirstOrDefault();
return result;
}
где Contact - класс, обозначающий пользователя, а
public class AuthContactData
{
public Contact Contact { get; set; }
public string PartnerName { get; set; }
}