survey-webapp/SurveyBackend/SurveyBackend.API/Contexts/UserContext.cs
2025-04-27 15:44:31 +05:00

31 lines
No EOL
1.1 KiB
C#

using System.Security.Claims;
using SurveyBackend.Core.Contexts;
using SurveyBackend.Services.Exceptions;
namespace SurveyBackend.Contexts;
/// <summary>
/// Упрощает получение UserId из JWT-токена
/// </summary>
public class UserContext : IUserContext
{
private readonly IHttpContextAccessor _httpContextAccessor;
/// <summary>
/// Добавьте HttpContextAccessor в DI и будет счастье
/// </summary>
/// <param name="httpContextAccessor"></param>
public UserContext(IHttpContextAccessor httpContextAccessor)
{
_httpContextAccessor = httpContextAccessor;
}
/// <summary>
/// Возвращает UserId из токена, при отсуствии кидает Unauthorized
/// </summary>
/// <exception cref="UnauthorizedAccessException"></exception>
public int UserId =>
int.Parse(
_httpContextAccessor.HttpContext?.User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.NameIdentifier)
?.Value ?? throw new UnauthorizedException("Where's your token mister"));
}