0

보안을 위해, 아무도 내 사이트에 등록 할 수 없지만 사이트에서 액세스 할 수있는 등록 페이지가있는 동안 사용자가 등록하는 것을 막을 수는 없으므로 "승인 된"플래그를 ApplicationUser 모델 :ASP.NET ID를 사용하여 데이터베이스에 사용자를 시드하는 방법은 무엇입니까?

public class ApplicationUser : IdentityUser 
{ 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public bool Authorized { get; set; } 
} 

아이디어는 사용자가, 또는하지 로그인 여부, true로 설정이 속성 값이없는 경우, 사용자가 보안 콘텐츠에 액세스 할 수 없다는 점입니다. 이전에 승인 된 사용자는 새 사용자를 승인해야합니다.

이렇게하면 첫 사용자 권한을 얻는 방법에 대한 의문이 생기므로 사용자를 마이그레이션 할 때 시드 할 것이라고 생각했습니다. 분명 내가 한 여기를 암호 해시를 몇 가지 중요한 분야를 누락

namespace Ortund.Migrations 
{ 
    internal sealed class Configuration : 
     DbMigrationsConfiguration<Ortund.Models.ApplicationDbContext> 
    { 
     protected override void Seed(Ortund.Models.ApplicationDbContext context) 
     { 
      context.Users.AddOrUpdate(
       u => u.Id, 
       new Models.ApplicationUser { EmailAddress = "[email protected]", Authorized = true, EmailConfirmed = true } 
      ); 
     } 
    } 
} 

을 나는 데 문제 곳이다 : 아래를 참조하십시오.

UserManager가 암호를 해시하는 방법을 모르겠으므로 함수가 비동기 작업이 아니기 때문에이 프로세스를 복제 할 수 없습니다.

참고로, 여기에 AccountController의 등록 방법은 다음과 같습니다

public async Task<ActionResult> Register(RegisterViewModel model) 
{ 
    if (ModelState.IsValid) 
    { 
     var user = new ApplicationUser { UserName = model.Email, Email = model.Email }; 
     var result = await UserManager.CreateAsync(user, model.Password); 
     ... 
    } 
} 

CreateAsync 기능이 해시됩니다 일반 텍스트 암호 문자열을 지정합니다. 위의 내 Seed 메서드에서이를 복제하려고 시도 할 때까지 볼 수있는 한 ApplicationUserManager.Create(Microsoft.AspNet.Identity.Owin.IdentityFactorOptions<ApplicationUserManager> options, Microsoft.Owin.IOwinContext context)에 대한 액세스 권한 만 있습니다. 여기서는 내 요구 사항에 맞지 않습니다.

시드 된 데이터에 전체 ApplicationUser를 만들려면 어떻게해야합니까?

+0

을 그 필자가 이런 짓을하지만 당신은 DbContext의 종자 메서드를 재정의해야합니다 꽤 확신하기 때문에 오랜 시간이 마이그레이션과는 대조적입니다. – Derek

+1

"승인 된"역할은 동일한 목적을 수행하지만 기존 보안 모델에 적합합니다 (즉, 작업에 대한 액세스를 제한하기 위해 농구를 뛰어 넘을 필요가 없음). 재 : 현재 질문, 프레임 워크가 계정 설정을 처리하게하십시오. – Basic

답변

4

UserManager.Create 메서드를 호출하고 사용자 이름과 일반 텍스트 암호를 전달할 수 있습니다. 그것은 당신의 암호 해시와 데이터베이스에이 같은

뭔가 것을 얻을 것이다 :

var userStore = new UserStore<ApplicationUser>(context); 
var userManager = new UserManager<ApplicationUser>(userStore); 
var user = new ApplicationUser { UserName = "username"}; 
userManager.Create(user, "password"); 
+0

... 그리고'Authorised' 플래그를 설정하십시오. – Basic

+0

아직 프로젝트에서 할 일이 많이 남아 있기 때문에 디버깅 할 수 없지만 디자인 타임 오류가 없으므로이 답변에 대한 upvote를 제공합니다. – Ortund