Entityframework 使用自定义身份用户从 api 注册身份
Entityframework identity register from api with custom identityUser
我需要用我的 Asp.Net API 创建一个 ApplicationUser(从 IdentityUser 派生的 class),我需要在与 [=26= 相同的数据库中创建它] MVC 使用。我的请求有效,因为它给了我 200 个响应,但我的用户不在 EntityFramework.
自动生成的 AspNetUser table 中
[HttpPost]
public async Task<ActionResult> Register(RegisterDTO register)
{
ApplicationUser user = new ApplicationUser();
if (register.Password == register.PasswordConfirm)
{
user.UserName = register.Email;
user.Email = register.Email;
}
else
{
return StatusCode(StatusCodes.Status500InternalServerError, new { Message = "Le mot de passe et sa confirmation ne sont pas identiques." });
}
var identityResult = await userManager.CreateAsync(user, register.Password);
if (!identityResult.Succeeded)
{
return StatusCode(StatusCodes.Status500InternalServerError, new { Error = identityResult.Errors });
}
return Ok();
}
这是我的 api
注册
services.AddDbContext<CegesDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
services.AddScoped<IUnitOfWork, UnitOfWork>();
services.AddScoped<ICegesServices, CegesServices>();
services.AddIdentity<ApplicationUser, IdentityRole>()
.AddDefaultTokenProviders().AddDefaultUI()
.AddEntityFrameworkStores<CegesDbContext>();
这是我 api
的启动
public class ApplicationUser : IdentityUser
{
public List<Entreprise> Entreprises { get; set; }
}
这是我在 Core 项目中的 ApplicationUser class
我不知道该做什么。我需要为我的 ApplicationUser 创建我的 on Create 方法还是我遗漏了什么?
检查 DefaultConnection 是否指向 appsettings.json 和 appsettings.Developer.json 中的正确数据库(如果该文件存在)。
我还假设 userManager.CreateAsync 工作正常并且只是 AspNetCore.Identity 的一部分。
我的下一个建议是不要像这样将模型/数据访问层拆分到两个项目中。而是创建一个共享项目并从中引用您的其他项目。
在 Visual Studio 中,这可以通过右键单击项目、选择添加、选择项目引用并选中要引用的项目来完成。
在这里,您可以管理整个数据访问层 (DAL),并在任何其他项目中引用它,而无需担心在可能冲突的两个位置维护它。
如果数据库迁移记录不匹配,则无法使用用户迁移更新数据库。您需要从现有位置添加用户,假设您首先使用代码是因为 AspNetUser table.
长话短说;博士
将您的数据访问层(模型、dbContext、迁移等)添加到 C# 共享项目并在您的 MVC 和 Web API 项目中引用它以保持一致性并减少未来的维护工作。
我需要用我的 Asp.Net API 创建一个 ApplicationUser(从 IdentityUser 派生的 class),我需要在与 [=26= 相同的数据库中创建它] MVC 使用。我的请求有效,因为它给了我 200 个响应,但我的用户不在 EntityFramework.
自动生成的 AspNetUser table 中[HttpPost]
public async Task<ActionResult> Register(RegisterDTO register)
{
ApplicationUser user = new ApplicationUser();
if (register.Password == register.PasswordConfirm)
{
user.UserName = register.Email;
user.Email = register.Email;
}
else
{
return StatusCode(StatusCodes.Status500InternalServerError, new { Message = "Le mot de passe et sa confirmation ne sont pas identiques." });
}
var identityResult = await userManager.CreateAsync(user, register.Password);
if (!identityResult.Succeeded)
{
return StatusCode(StatusCodes.Status500InternalServerError, new { Error = identityResult.Errors });
}
return Ok();
}
这是我的 api
注册services.AddDbContext<CegesDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
services.AddScoped<IUnitOfWork, UnitOfWork>();
services.AddScoped<ICegesServices, CegesServices>();
services.AddIdentity<ApplicationUser, IdentityRole>()
.AddDefaultTokenProviders().AddDefaultUI()
.AddEntityFrameworkStores<CegesDbContext>();
这是我 api
的启动 public class ApplicationUser : IdentityUser
{
public List<Entreprise> Entreprises { get; set; }
}
这是我在 Core 项目中的 ApplicationUser class
我不知道该做什么。我需要为我的 ApplicationUser 创建我的 on Create 方法还是我遗漏了什么?
检查 DefaultConnection 是否指向 appsettings.json 和 appsettings.Developer.json 中的正确数据库(如果该文件存在)。
我还假设 userManager.CreateAsync 工作正常并且只是 AspNetCore.Identity 的一部分。
我的下一个建议是不要像这样将模型/数据访问层拆分到两个项目中。而是创建一个共享项目并从中引用您的其他项目。
在 Visual Studio 中,这可以通过右键单击项目、选择添加、选择项目引用并选中要引用的项目来完成。
在这里,您可以管理整个数据访问层 (DAL),并在任何其他项目中引用它,而无需担心在可能冲突的两个位置维护它。
如果数据库迁移记录不匹配,则无法使用用户迁移更新数据库。您需要从现有位置添加用户,假设您首先使用代码是因为 AspNetUser table.
长话短说;博士 将您的数据访问层(模型、dbContext、迁移等)添加到 C# 共享项目并在您的 MVC 和 Web API 项目中引用它以保持一致性并减少未来的维护工作。