2016-06-27 10 views
1

私は認証でアプリケーションを作成しています。私は、次のフレームワークを使用しています:エンティティフレームワークIDとASP.NETのコアコアRC2がデータベースにユーザーを作成していません

  • ASP.NETコアRC2
  • Entity Frameworkのコア
  • NpgsqlのEFCoreドライバ

を播種するために、私は一時的なものとして追加さDataSeederクラスを作成しましたサービスはConfigureServices機能にあり、後で構成機能で呼び出されます。 IdentityUserが存在するかどうかをチェックし、存在しない場合は、adminという名前のロールを作成し、Adminロールを追加します。

ただし、ユーザーにロールを追加すると、外部キー制約が違反し、ASP_NET_USERSにそのPKのエントリが含まれていないという例外が表示されます。

私はデータベースをチェックしましたが、作成した新しいロールが実際に含まれていますが、ユーザーテーブルはまだ空です。

public class DataSeeder { 
    private DatabaseContext _context; 
    private UserManager<IdentityUser> _userManager; 
    private RoleManager<IdentityRole> _roleManager; 

    public DataSeeder(DatabaseContext ctx, UserManager<IdentityUser> userManager, RoleManager<IdentityRole> roleManager) { 
     _context = ctx; 
     _userManager = userManager; 
     _roleManager = roleManager; 
    } 

    public async Task CreateUserAsync() { 
     if (! await _userManager.Users.AnyAsync()) { 
      var adminRole = new IdentityRole("admin"); 
      var rootRole = new IdentityRole("root"); 

      await _roleManager.CreateAsync(adminRole); 
      await _roleManager.CreateAsync(rootRole); 

      var user = new IdentityUser { 
       Email = "[email protected]", 
       EmailConfirmed = true, 
       UserName = "superadmin" 
      }; 

      await _userManager.CreateAsync(user, "[email protected]"); 

      await _userManager.AddClaimAsync(user, new Claim("role", "admin")); 
     } 
    } 
} 

だから、例外がAddClaimAsyncでスローされます。ここでは

は私DataSeederクラスです。どんな助けも本当にありがたいです

+1

私は今は見ることができませんが、IIRC createAsyncは結果オブジェクトを返し、作成されていない理由を確認できます。私はそれがパスワードの複雑さまたはそのようなもののためだと思います。 – RubbleFord

答えて

1

_userManager.createAsyncの結果を確認してください。

var result = await _userManager.CreateAsync(user, "[email protected]"); 

if (!result.Succeeded) 
{ 
    // something went wrong, inspect the errors 
} 

IdentityUserに必須のプロパティが見つからないか、パスワードが無効である可能性が高いです。

+0

Oke、それは愚かな間違いだった....私は入力が間違っていた場合にExceptionをスローすることを期待していたが、必要な複雑さを持たないパスワードだった。 – larzz11

関連する問題