web-dev-qa-db-ja.com

SeedメソッドASP .NET MVC 5 Webアプリケーション)でUserManagerによってApplicationUserを作成する方法

古い方法でユーザーを作成できます:

 var users = new List<ApplicationUser> { 
                        new ApplicationUser{PasswordHash = hasher.HashPassword("TestPass44!"), Email = "[email protected]", UserName = "[email protected]",  SecurityStamp = Guid.NewGuid().ToString()},
                        new ApplicationUser{PasswordHash = hasher.HashPassword("TestPass44!"), Email = "[email protected]", UserName = "[email protected]",  SecurityStamp = Guid.NewGuid().ToString()}
                        };

users.ForEach(user => context.Users.AddOrUpdate(user));

context.SaveChanges();

しかし、私はUserManagerを使用してASP.NET MVC 5.1の方法でやりたいと思っています。 Register POSTメソッドがAccountControllerでどのように見えるかを調べました:

 public async Task<ActionResult> Register(RegisterViewModel model) {
            if (ModelState.IsValid) {
                var user = new ApplicationUser() { UserName = model.Email, Email = model.Email };
                IdentityResult result = await UserManager.CreateAsync(user, model.Password);
                if (result.Succeeded) { [...]

だから私は同じことをやろうとしました:

var user =  new ApplicationUser() { Email = "[email protected]", 
                                    UserName = "[email protected]"};
IdentityResult result =  UserManager.CreateAsync(user, "abcwq12312!P");

しかし私はこれを手に入れます:

enter image description here

また、UserManager. VS2013はリストにメソッドを表示しません。

では、この方法でユーザーを追加する方法は?

編集1:

enter image description here

13
Yoda

ユーザーCreateAsyncを作成する必要はありません。問題はどこか他の場所にありました。 ApplicationUserManagerではなくUserManagerを使用する必要があります(これはデータベースに何も追加していません)。

 var store = new UserStore<ApplicationUser>(context);
 var manager =  new ApplicationUserManager(store);
 var user = new ApplicationUser() { Email = "[email protected]", UserName = "[email protected]" };
 manager.Create(user, "TestPass44!");
14
Yoda

カスタムTUserまたはTKeyを提供していない限り、表示されているエラーを理解できません。

IdentityResult user = await UserManager.CreateAsync<CustomUser, CustomKey>(user, "abcwq12312!P");

CustomUserではなくApplicationUserとしてユーザーを渡し、CustomKeyが文字列ではなくintの場合はおそらくintを渡します。 (CreateAsyncはタイプを推測できます。明示的に表示するためにそこに投稿しました)

私が目にするもう1つの問題は、タスクを待っていないことです。次のようにawaitも追加する必要があります。

IdentityResult user = await UserManager.CreateAsync(user, "abcwq12312!P");

お役に立てれば。


編集:

完全を期すために、この質問の完全な回答を掲載しますが、あなたの回答があります。 : ユーザーマネージャでCreateAsyncにアクセスできません

var result = await UserManager.CreateAsync(user, register.Password);

上記のステートメントのUserManagerは、予想どおりClassではありません。タイプUserManager<ApplicationUser>のプロパティ。

したがって、最初にプロパティを次のように宣言しました

public UserManager<ApplicationUser> UserManager { get; private set; }

これで、Asyncバージョンを使用してユーザーを作成できます。次のステートメントは機能します。

var result = await UserManager.CreateAsync(user, register.Password);

重複の可能性についてもフラグを立てます。

1
Bart Calixto