UserManager.CreateAsync不会将用户添加到数据库

时间:2017-03-17 07:27:42

标签: asp.net-core asp.net-identity

我有这个seeder类,它在Configure方法的Startup.cs文件末尾调用:

public class UserSeeder
    {
        private readonly ApplicationDbContext _context;
        private readonly UserManager<ApplicationUser> _userManager;
        public UserSeeder(ApplicationDbContext context, UserManager<ApplicationUser> userManager)
        {
            _context = context;
            _userManager = userManager;
        }

        public async Task Seed()
        {
            if (!await _context.Users.AnyAsync())
            {
                var user = new ApplicationUser()
                {
                    UserName = "admin",
                    Email = "admin@test.com"
                };
                await _userManager.CreateAsync(user, "passwort4admin");
            }
        }
    }

代码被执行,我甚至在方法调用周围放了一个try / catch但是没有错误发生且没有用户插入到数据库中!

为什么不呢?

3 个答案:

答案 0 :(得分:3)

UserManager<>使用IUserStore的幕后,你是否在IOC容器的startup.cs中配置了这个用户界面?

services.AddIdentity<ApplicationUser, ApplicationRole>()
    .AddEntityFrameworkStores<MyContext, Guid>()
    .AddUserStore<ApplicationUserStore>() //this one provides data storage for user.
    .AddRoleStore<ApplicationRoleStore>()
    .AddUserManager<ApplicationUserManager>()
    .AddRoleManager<ApplicationRoleManager>()
    .AddDefaultTokenProviders();

答案 1 :(得分:0)

就我而言,它是用户名中的一个空格。您可能设置了其他约束,使用户创建操作非法。

在大多数情况下,您可以通过调查操作返回的对象中的消息来获得有关错误确切原因的明确信息。

IdentityUser userToBe = ...
IdentityResult result = await UserManager.CreateAsync(userToBe);
  if(!result.Succeeded)
    foreach(IdentityError error in result.Errors)
      Console.WriteLine($"Oops! {error.Description} ({error.Code}));

答案 2 :(得分:-1)

问题是密码的复杂性。添加大写字母以及该问题将解决的数字和符号