Как создать ApplicationUser с помощью UserManager в методе Seed веб-приложения ASP.NET MVC 5
Я могу создавать пользователей по-старому:
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();
но я хочу сделать это с помощью ASP.NET MVC 5.1, используя UserManager
. Я заглянул, как выглядит метод 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, в списке не отображаются какие-либо методы.
Итак, как добавить пользователя таким образом?
EDIT1:
![enter image description here]()
Ответы
Ответ 1
Хорошо, поэтому для создания пользователя CreateAsync
нет необходимости, проблема была где-то еще. Нужно использовать ApplicationUserManager
not 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!");
Ответ 2
Я не понимаю отображаемую вами ошибку, если вы не предоставляете пользовательские TUser
или TKey
, в этом случае:
IdentityResult user = await UserManager.CreateAsync<CustomUser, CustomKey>(user, "abcwq12312!P");
и передавать пользователя как CustomUser
вместо ApplicationUser
и, возможно, int, если ваш CustomKey
является int вместо строки. (CreateAsync может выводить типы, я разместил там, чтобы показать их явно)
Другая проблема, которую я вижу, - это то, что вы не ожидаете задачи, вы также должны добавить ожидание, например:
IdentityResult user = await UserManager.CreateAsync(user, "abcwq12312!P");
Надеюсь, что это поможет.
EDIT:
Для полноты я отправлю полный ответ из этого вопроса, но есть ваш ответ.: Не удалось получить доступ к 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);
Я также буду отмечать возможный дубликат.