2015-10-04 147 views
0

我想在我的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 = "[email protected]", UserName = "Growapps" }; 
      string password = "mail123"; 

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

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

但經過我添加的遷移和更新數據庫中的新用戶不會出現。我是否明白,每次遷移後Seed方法都會調用,並且應該創建一個新用戶?如果是的話,我做錯了什麼?如果沒有,當我的網絡應用第一次啓動時,我還可以添加超級用戶嗎?

+1

您需要檢查if( userAlreadyexists)return;我在這裏沒有發現任何錯誤..你有什麼錯誤嗎?我想你的管理員obejct沒有要求所有字段(名字,姓氏)。請在Step7查看http://bitoftech.net/2015/03/11/asp-net-identity-2-1-roles-based-authorization-authentication-asp-net-web-api/ –

回答

0

所以這個錯誤並不明顯,在模板的「登錄」視圖中(即由ASP.NET MVC生成),您應該鍵入「email」和密碼,問題是控制器中的Login方法會將該電子郵件字段作爲用戶名,所以如果你用不同的名稱和電子郵件代碼創建用戶,你將難以登錄。我猜微軟應該在他們的模板中更改字段的佔位符名稱:D