如何在EntityFramework Seed()方法中重置用户密码?

时间:2016-05-01 13:25:52

标签: c# asp.net entity-framework asp.net-mvc-5 asp.net-identity-2

我想在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));
}

我想知道是否有其他方法可以生成令牌以更改密码。

1 个答案:

答案 0 :(得分:2)

您不需要OWIN上下文,在您的代码中实例化了UserManager。如果您需要有关UserManager的建议,则必须显示IUserTokenProvider代码 但是您可以在不生成令牌的情况下更新密码。将方法添加到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);