Здесь предполагается, что вы используете как минимум версию 3 Identity вместе с OWIN и инфраструктурой сущностей.
Не создавайте поставщика защиты данных каждый раз вручную. Получите его при запуске из конструктора приложений и сохраните для использования менеджером пользователей.
public static class Auth {
internal static IDataProtectionProvider DataProtectionProvider { get; private set; }
}
public partial class Startup {
public void ConfigureAuth(IAppBuilder app) {
Auth.DataProtectionProvider = app.GetDataProtectionProvider();
//...other code removed for brevity
}
}
Настройте DbContext для сохранения информации о членстве
public class MyIdentityDbContext : IdentityDbContext<IdentityUser> {
public MyIdentityDbContext()
: base("MembershipConnection") { }
public static MyIdentityDbContext Create() {
return new MyIdentityDbContext();
}
}
Теперь создайте производный класс UserManager
и настройте его для использования поставщика защиты данных.
public class IdentityUserManager : UserManager<IdentityUser> {
private IdentityUserManager()
: base(new UserStore<IdentityUser>(MyIdentityDbContext.Create())) {
//...other code removed for brevity
var dataProtectionProvider = Auth.DataProtectionProvider;
if (dataProtectionProvider != null) {
this.UserTokenProvider = new DataProtectorTokenProvider<IdentityUser>(dataProtectionProvider.Create("UserToken"));
}
}
public static IdentityUserManager Create() {
return new IdentityUserManager();
}
}
Итак, теперь, если у вас есть пользователи, зарегистрированные в вашем постоянном хранилище, вы сможете сгенерировать свой токен и сбросить пароль.
var userManager = IdentityUserManager.Create();
var resetToken = await userManager.GeneratePasswordResetTokenAsync(id);
var result = await userManager.ResetPasswordAsync(id, resetToken, newPassword);
Теперь, основываясь на ваших комментариях в сообщении, вполне может быть, что Load User Profile
на хосте (при условии, что IIS) необходимо установить на true
.
Цитирование этого ответа
У меня были те же проблемы, за исключением того, что я размещался на amazon ec2. я смог решить эту проблему, перейдя в пул приложений в IIS и (в расширенных настройках после щелчка правой кнопкой мыши) установив модель процесса - загрузить профиль пользователя = true.
Если это так, и у вас нет доступа к серверу, чтобы иметь возможность изменить этот параметр, как вы указали в комментариях, то сообщество может предоставить не так много того, что еще не было освещено в сообщениях, которые встречались. этот конкретный вопрос.
person
Nkosi
schedule
13.01.2017