如何在 EntityFramework Seed() 方法中重置用户密码?
How do I reset a user's password in EntityFramework Seed() method?
我想在EntityFramework的Seed方法中重设管理员密码。但是,因为没有 OWIN 上下文,我无法初始化 ApplicationUserManager 来生成令牌。
这是我的代码:
protected override void Seed(ModelUNRegister.Models.ApplicationDbContext context)
var userManager = new ApplicationUserManager(new UserStore<ApplicationUser>(context));
// How should I Initalize userManager.UserTokenProvider?
if (userManager.FindByName(AppSettings.InitalAdminAccount) == null)
{
// Create user
}
else
{
var adminUser = userManager.FindByName(AppSettings.InitalAdminAccount);
// The following code throws error: IUserTokenProvider is not registered.
string resetToken = userManager.GeneratePasswordResetToken(adminUser.Id);
var result = userManager.ResetPassword(adminUser.Id, resetToken, AppSettings.InitalAdminPassword);
if (!result.Succeeded) throw new InvalidOperationException(string.Concat(result.Errors));
}
想知道有没有其他方法可以生成token来修改密码
您不需要 OWIN 上下文,在您的代码中实例化了一个 UserManager
。如果您需要关于 IUserTokenProvider
的建议,您必须出示您的 UserManager
代码
但是您可以在不生成令牌的情况下更新密码。将方法添加到 UserManager
public Task<IdentityResult> ChangePassword(ApplicationUser user, string newPassword)
{
var store = Store as IUserPasswordStore<ApplicationUser, string>;
return UpdatePassword(store, user, newPassword);
}
在你的 Seed
userManager.ChangePassword(adminUser, AppSettings.InitalAdminPassword);
我想在EntityFramework的Seed方法中重设管理员密码。但是,因为没有 OWIN 上下文,我无法初始化 ApplicationUserManager 来生成令牌。
这是我的代码:
protected override void Seed(ModelUNRegister.Models.ApplicationDbContext context)
var userManager = new ApplicationUserManager(new UserStore<ApplicationUser>(context));
// How should I Initalize userManager.UserTokenProvider?
if (userManager.FindByName(AppSettings.InitalAdminAccount) == null)
{
// Create user
}
else
{
var adminUser = userManager.FindByName(AppSettings.InitalAdminAccount);
// The following code throws error: IUserTokenProvider is not registered.
string resetToken = userManager.GeneratePasswordResetToken(adminUser.Id);
var result = userManager.ResetPassword(adminUser.Id, resetToken, AppSettings.InitalAdminPassword);
if (!result.Succeeded) throw new InvalidOperationException(string.Concat(result.Errors));
}
想知道有没有其他方法可以生成token来修改密码
您不需要 OWIN 上下文,在您的代码中实例化了一个 UserManager
。如果您需要关于 IUserTokenProvider
的建议,您必须出示您的 UserManager
代码
但是您可以在不生成令牌的情况下更新密码。将方法添加到 UserManager
public Task<IdentityResult> ChangePassword(ApplicationUser user, string newPassword)
{
var store = Store as IUserPasswordStore<ApplicationUser, string>;
return UpdatePassword(store, user, newPassword);
}
在你的 Seed
userManager.ChangePassword(adminUser, AppSettings.InitalAdminPassword);