Вам нужно добавить blank = True в вашу модель, так как это купон ForeignKey = models.ForeignKey('carts.Coupon',related_name='carts',on_delete=models.SET_NULL, null=True, blank=True )
. Хорошая сообщение о разнице нулей и пробелов на модели
Функция signInManager.PasswordSignInAsync
принимает имя пользователя и пароль и регистрирует вас. Она занимает еще два поля (bools), первое - «постоянное», которое вы можете отметить как ложное в вашем случае, а второе - блокировка. Это возвращает SignInResult
, который затем можно использовать для проверки успешности входа в систему с помощью result.Succeeded
.
var result = signInManager.PasswordSignInAsync(username, pass, true, true);
return result.Succeeded;
Я думаю, что IUserPasswordStore не несет ответственности за хэширование пароля, поэтому вам не нужно помещать туда свой хэш-алгоритм. Ответственность IUserPasswordStore заключается только в том, чтобы установить и получить хешированный пароль от пользователя Identity (MyIdentityUser).
Взгляните на реализацию GetPasswordHashAsync в UserStoreBase, просто верните user.PasswordHash, вот и все.
https://github.com/aspnet/AspNetCore/blob/bfec2c14be1e65f7dd361a43950d4c848ad0cd35/src/Identity/Extensions.Stores/src/UserStoreBase.cs [115] [IserS], если вы внедрили Iser SoS, если вы это используете не означает, что у вас должен быть свой собственный хэш-пароль.
Ответственный за хеширование пароля - IPasswordHasher. Если вы хотите иметь свой собственный хэш-пароль, вы можете реализовать его самостоятельно.
public class MyPasswordHasher : IPasswordHasher<MyIdentityUser>
{
public string HashPassword(MyIdentityUser user, string password)
{
...
}
public PasswordVerificationResult VerifyHashedPassword(MyIdentityUser user, string hashedPassword, string providedPassword)
{
...
}
}
Для хэша пароля по умолчанию вы можете найти его здесь,
И зарегистрируйте его для DI в файле startup.cs, чтобы UserManager использовал ваш собственный пользовательский хэш-пароль. Или, другими словами, это добавит ваш хэш-пароль в поток.
services.AddScoped<IPasswordHasher<MyIdentityUser>, MyPasswordHasher>();
А также взгляните на класс UserManager, здесь взаимодействуют IUserPasswordStore и IPasswordHasher. Внутри UserManager вы найдете следующий код
passwordStore.SetPasswordHashAsync(user, PasswordHasher.HashPassword(newPassword)).WithCurrentCulture();