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

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

我想在EntityFramework的Seed方法中重置管理员密码。但是,由于没有 OWIN 上下文,我无法初始化 ApplicationUserManager 来生成 token 。

这是我的代码:

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 代码 但您可以更新密码而不生成 token 。将方法添加到UserManager

public Task<IdentityResult> ChangePassword(ApplicationUser user, string newPassword)
{
     var store = Store as IUserPasswordStore<ApplicationUser, string>;
     return UpdatePassword(store, user, newPassword);
}

并在您的种子

userManager.ChangePassword(adminUser, AppSettings.InitalAdminPassword);

关于c# - 如何在 EntityFramework Seed() 方法中重置用户密码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36967189/

相关文章:

c# - 如何更改 Windows Phone 应用程序栏的颜色?

C# List<string> OrderBy 拆分

c# - Visual Studio 2015 Update 3 中 ASP.NET Core v1.0 的浏览器链接

c# - 从 ASP.Net 页面运行工具的最佳方式

linq - 为什么 Entity Framework 的 AsEnumerable() 从服务器下载所有数据?

c# - .NET Core Entity Framework 如何从模型创建表

c# - 在异步处理程序中最初将 handled 属性设置为 true 后,如何重新传播事件?

C# WebClient 与 fidler2 <打开和关闭>(单独的结果)

c# - ASP.NET:本地化:使用动态键在 MVC View 中获取 .resx 值

sql-server - Entity Framework 不会解决与复合主键的 PK-FK 关系?