- 后端新增 Apple 登录端点 /api/auth/apple-login - 新增 AppleTokenValidator 验证 IdentityToken - User 实体添加 AppleUserId 字段,Phone 改为可空 - 前端添加 sign_in_with_apple 依赖和 Apple 登录按钮 - 统一 Bundle ID 为 com.datalumina.YYA,显示名称为小脉健康 - 配置 DEVELOPMENT_TEAM 和 Sign in with Apple Entitlements - 补充 NSCamera/NSPhotoLibrary 权限描述 - 生产 API 地址改为 https://erpapi.datalumina.cn/xiaomai - Flutter 升级至 3.44.6 / Dart 3.12.2 Co-Authored-By: Claude <noreply@anthropic.com>
35 lines
2.1 KiB
C#
35 lines
2.1 KiB
C#
using Health.Application.Auth;
|
|
|
|
namespace Health.WebApi.Endpoints;
|
|
|
|
public static class AuthEndpoints
|
|
{
|
|
public static void MapAuthEndpoints(this WebApplication app)
|
|
{
|
|
app.MapPost("/api/auth/send-sms", async (SendSmsRequest request, IAuthService auth, CancellationToken ct) =>
|
|
ToResult(await auth.SendCodeAsync(request.Phone, app.Environment.IsDevelopment(), ct)));
|
|
app.MapPost("/api/auth/register", async (RegisterRequest request, IAuthService auth, CancellationToken ct) =>
|
|
ToResult(await auth.RegisterAsync(new RegisterCommand(request.Phone, request.SmsCode, request.Name, request.DoctorId), ct)));
|
|
app.MapPost("/api/auth/login", async (LoginRequest request, IAuthService auth, CancellationToken ct) =>
|
|
ToResult(await auth.LoginAsync(request.Phone, request.SmsCode, ct)));
|
|
app.MapPost("/api/auth/apple-login", async (AppleLoginRequest request, IAuthService auth, CancellationToken ct) =>
|
|
ToResult(await auth.AppleLoginAsync(new AppleLoginCommand(request.IdentityToken, request.AuthorizationCode, request.Name), ct)));
|
|
app.MapPost("/api/auth/refresh", async (RefreshRequest request, IAuthService auth, CancellationToken ct) =>
|
|
ToResult(await auth.RefreshAsync(request.RefreshToken, ct)));
|
|
app.MapPost("/api/auth/logout", async (RefreshRequest request, IAuthService auth, CancellationToken ct) =>
|
|
{
|
|
await auth.LogoutAsync(request.RefreshToken, ct);
|
|
return Results.Ok(new { code = 0, data = new { success = true }, message = (string?)null });
|
|
});
|
|
}
|
|
|
|
private static IResult ToResult(AuthResult result) =>
|
|
Results.Ok(new { code = result.Code, data = result.Data, message = result.Message });
|
|
}
|
|
|
|
public sealed record SendSmsRequest(string Phone);
|
|
public sealed record RegisterRequest(string Phone, string SmsCode, string Name, Guid DoctorId);
|
|
public sealed record LoginRequest(string Phone, string SmsCode);
|
|
public sealed record AppleLoginRequest(string IdentityToken, string? AuthorizationCode, string? Name);
|
|
public sealed record RefreshRequest(string RefreshToken);
|