实体框架,创建超级用户

时间:2015-10-04 11:24:42

标签: c# asp.net-mvc entity-framework

我想在ASP.NET MVC应用程序中创建超级用户。我读到我可以通过添加"admin"角色来实现它,并且按过滤器检查是当前用户具有此角色。

我在教程中读到了如何在应用启动时创建用户和角色,但在所有教程中他们都不使用实体框架。所以我尝试在Configuration.cs文件夹中的Migration文件中创建超级用户:

namespace WebApp.Migrations
{
    using Microsoft.AspNet.Identity;
    using Microsoft.AspNet.Identity.EntityFramework;
    using System;
    using System.Data.Entity;
    using System.Data.Entity.Migrations;
    using System.Linq;
    using WebApp.Models;

    internal sealed class Configuration : DbMigrationsConfiguration<WebApp.Models.ApplicationDbContext>
    {
        protected override void Seed(WebApp.Models.ApplicationDbContext context)
        {
            var userManager = new ApplicationUserManager(new UserStore<ApplicationUser>(context));
            var roleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(context));

            roleManager.Create(new IdentityRole { Name = "admin" });
            var admin = new ApplicationUser { Email = "mail@growapps.ru", UserName = "Growapps" };
            string password = "mail123";

            var result = userManager.Create(admin, password);

            if (result.Succeeded)
            {
                userManager.AddToRole(admin.Id, "admin");
            }
        }
    }
}

但是在我添加迁移和更新数据库后,新用户不会出现。我理解正确,每次迁移后Seed方法调用并应创建一个新用户?如果是的话,我做错了什么?如果没有,我的Web应用程序首次启动时如何才能添加超级用户?

1 个答案:

答案 0 :(得分:0)

所以错误并不明显,在模板的“登录”视图中(由ASP.NET MVC生成)你应该键入“email”和密码,问题是控制器中的Login方法将该电子邮件字段发送为用户名,所以如果你在代码中用不同的名称和电子邮件值创建用户,你将难以登录。我猜微软应该在他们的模板中更改字段的占位符名称:D