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;
|
||
}
|
||
}
|
||
} |