54 lines
1.7 KiB
C#
54 lines
1.7 KiB
C#
|
|
using Microsoft.AspNetCore.Mvc;
|
|||
|
|
using System.Security.Claims;
|
|||
|
|
|
|||
|
|
namespace FutureMailAPI.Controllers
|
|||
|
|
{
|
|||
|
|
/// <summary>
|
|||
|
|
/// 基础控制器,提供通用的用户身份验证方法
|
|||
|
|
/// </summary>
|
|||
|
|
[ApiController]
|
|||
|
|
public class BaseController : ControllerBase
|
|||
|
|
{
|
|||
|
|
/// <summary>
|
|||
|
|
/// 获取当前用户ID
|
|||
|
|
/// 兼容OAuth中间件和JWT令牌两种验证方式
|
|||
|
|
/// </summary>
|
|||
|
|
/// <returns>用户ID,如果未认证则返回0</returns>
|
|||
|
|
protected int GetCurrentUserId()
|
|||
|
|
{
|
|||
|
|
var userIdClaim = User.FindFirst(ClaimTypes.NameIdentifier);
|
|||
|
|
if (userIdClaim != null && int.TryParse(userIdClaim.Value, out var userId))
|
|||
|
|
{
|
|||
|
|
return userId;
|
|||
|
|
}
|
|||
|
|
return 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 获取当前用户邮箱
|
|||
|
|
/// </summary>
|
|||
|
|
/// <returns>用户邮箱,如果未认证则返回空字符串</returns>
|
|||
|
|
protected string GetCurrentUserEmail()
|
|||
|
|
{
|
|||
|
|
return User.FindFirst(ClaimTypes.Email)?.Value ?? string.Empty;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 获取当前用户名
|
|||
|
|
/// </summary>
|
|||
|
|
/// <returns>用户名,如果未认证则返回空字符串</returns>
|
|||
|
|
protected string GetCurrentUsername()
|
|||
|
|
{
|
|||
|
|
return User.FindFirst(ClaimTypes.Name)?.Value ?? string.Empty;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 获取当前客户端ID
|
|||
|
|
/// </summary>
|
|||
|
|
/// <returns>客户端ID,如果未认证则返回空字符串</returns>
|
|||
|
|
protected string GetCurrentClientId()
|
|||
|
|
{
|
|||
|
|
return User.FindFirst("client_id")?.Value ?? string.Empty;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|