古い方法でユーザーを作成できます:
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");
しかし私はこれを手に入れます:
また、UserManager.
VS2013はリストにメソッドを表示しません。
では、この方法でユーザーを追加する方法は?
編集1:
ユーザー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!");
カスタム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);
重複の可能性についてもフラグを立てます。