我的 ASP.NET Core Web API 项目中有一个自定义
User
类,它从 IdentityUser<Guid>
扩展了 Microsoft.AspNetCore.Identity
。
这是我的
User
课程的简化版本:
using Microsoft.AspNetCore.Identity;
using System;
namespace Quilt.Models.User
{
public class UserEntity : IdentityUser<Guid>
{
public string FirstName { get; set; }
public string LastName { get; set; }
private DateTime _birthday;
public DateTime Birthday
{
get { return _birthday; }
set
{
_birthday = DateTime.SpecifyKind(value, DateTimeKind.Utc);
}
}
public string? Avatar { get; set; }
public string Gender { get; set; }
}
}
我使用 ASP.NET Core 8 Identity 进行用户身份验证,目前,在用户注册过程中,仅需要电子邮件和密码字段。但是,我希望用户在注册过程中提供其他信息,例如名字、姓氏、生日、头像(可为空)和性别。
这是我的
Program.cs
配置:
using System.Security.Claims;
using Microsoft.AspNetCore.Identity;
using Microsoft.EntityFrameworkCore;
using Quilt.DataAccess.Data;
using Quilt.Models.User;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDbContext<QuiltDbContext>(options =>
options.UseNpgsql(builder.Configuration.GetConnectionString("DefaultConnection")));
builder.Services.AddAuthentication().AddBearerToken(IdentityConstants.BearerScheme);
builder.Services.AddAuthorizationBuilder();
builder.Services.AddDbContext<QuiltDbContext>(options => options.UseInMemoryDatabase("AppDb"));
builder.Services.AddIdentityCore<UserEntity>()
.AddEntityFrameworkStores<QuiltDbContext>()
.AddApiEndpoints();
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
var app = builder.Build();
app.MapGroup("/my-identity-api").MapIdentityApi<IdentityUser>();
app.MapGet("/", (ClaimsPrincipal user) => $"Hello {user.Identity!.Name}").RequireAuthorization();
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}
app.Run();
如何修改我的注册过程以包含
UserEntity
类中的这些附加字段?我是否应该自定义注册端点?如果是,如何在仍然利用 ASP.NET Core Identity 进行身份验证的同时实现这一目标?
任何帮助或指导将不胜感激。谢谢!
您可以尝试以下方法:
创建RegisterDTO.cs
public class RegisterDTO
{
public string Email { get; set; }
public string Password { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public DateTime Birthday { get; set; }
public string? Avatar { get; set; }
public string Gender { get; set; }
}
创建一个
IdentityApiEndpointRouteBuilderExtensions.cs
并复制此链接中的所有代码https://github.com/dotnet/aspnetcore/blob/main/src/Identity/Core/src/IdentityApiEndpointRouteBuilderExtensions.cs
将此文件中的所有
MapIdentityApi
替换为 MapCustomIdentityApi
。并添加修改继承到where TUser: UserEntity, new()
将“/register”端点注册模型更改为
RegisterDTO
var user = new TUser
{
Email = registration.Email,
FirstName = registration.FirstName,
LastName = registration.LastName,
Birthday = registration. Birthday,
Avatar = registration.Avatar,
Gender = registration.Gender
};
在program.cs中使用
app.MapCustomIdentityApi<UserEntity>();
代替。