Files
tiku-backend.net/Tiku.Api/Controllers/AuthController.cs
2026-07-26 12:55:31 +08:00

93 lines
2.5 KiB
C#

using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Tiku.Application.Auth;
namespace Tiku.Api.Controllers;
[ApiController]
[Route("api/auth")]
public sealed class AuthController(IAuthService authService) : ControllerBase
{
[AllowAnonymous]
[HttpPost("login/password")]
public async Task<ActionResult<AuthenticatedUser>> LoginWithPassword(
PasswordLoginHttpRequest request,
CancellationToken cancellationToken)
{
var result = await authService.LoginWithPasswordAsync(
new PasswordLoginRequest(
request.TenantId,
request.Phone,
request.Password,
GetIpAddress(),
Request.Headers.UserAgent.ToString()),
cancellationToken);
return Ok(result);
}
[AllowAnonymous]
[HttpPost("login/sms")]
public async Task<ActionResult<AuthenticatedUser>> LoginWithSms(
SmsLoginHttpRequest request,
CancellationToken cancellationToken)
{
var result = await authService.LoginWithSmsAsync(
new SmsLoginRequest(
request.TenantId,
request.Phone,
request.Code,
GetIpAddress(),
Request.Headers.UserAgent.ToString()),
cancellationToken);
return Ok(result);
}
[AllowAnonymous]
[HttpPost("refresh")]
public async Task<ActionResult<AuthTokenPair>> Refresh(
RefreshHttpRequest request,
CancellationToken cancellationToken)
{
var result = await authService.RefreshAsync(
new RefreshSessionRequest(
request.RefreshToken,
GetIpAddress(),
Request.Headers.UserAgent.ToString()),
cancellationToken);
return Ok(result);
}
[AllowAnonymous]
[HttpPost("logout")]
public async Task<IActionResult> Logout(
RefreshHttpRequest request,
CancellationToken cancellationToken)
{
await authService.LogoutAsync(
new LogoutSessionRequest(request.RefreshToken),
cancellationToken);
return NoContent();
}
private string? GetIpAddress()
{
return HttpContext.Connection.RemoteIpAddress?.ToString();
}
}
public sealed record PasswordLoginHttpRequest(
Guid TenantId,
string Phone,
string Password);
public sealed record SmsLoginHttpRequest(
Guid TenantId,
string Phone,
string Code);
public sealed record RefreshHttpRequest(string RefreshToken);