2

EntityFrameworkのSeedメソッドで管理者のパスワードをリセットします。ただし、OWINコンテキストがないため、ApplicationUserManagerを初期化してトークンを生成することはできません。EntityFramework Seed()メソッドでユーザーのパスワードをリセットするにはどうすればよいですか?

これは私のコードです:

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)); 
} 

私はパスワードを変更するトークンを生成する他の方法があるかどうかを知りたいです。

答えて

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); 
内にメソッドを追加します
関連する問題