보안을 위해, 아무도 내 사이트에 등록 할 수 없지만 사이트에서 액세스 할 수있는 등록 페이지가있는 동안 사용자가 등록하는 것을 막을 수는 없으므로 "승인 된"플래그를 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를 만들려면 어떻게해야합니까?
을 그 필자가 이런 짓을하지만 당신은 DbContext의 종자 메서드를 재정의해야합니다 꽤 확신하기 때문에 오랜 시간이 마이그레이션과는 대조적입니다. – Derek
"승인 된"역할은 동일한 목적을 수행하지만 기존 보안 모델에 적합합니다 (즉, 작업에 대한 액세스를 제한하기 위해 농구를 뛰어 넘을 필요가 없음). 재 : 현재 질문, 프레임 워크가 계정 설정을 처리하게하십시오. – Basic