using Furion.DataEncryption;
using SimpleTool;

namespace SafeCampus.Plugin.SignalR
{
    /// <summary>
    /// 用户ID提供器
    /// </summary>
    public class UserIdProvider : IUserIdProvider
    {
        public string GetUserId(HubConnectionContext connection)
        {
            var token = connection.GetHttpContext().Request.Query["access_token"];//获取token
            var claims = JWTEncryption.ReadJwtToken(token)?.Claims;//解析token
            var userId = claims.FirstOrDefault(u => u.Type == ClaimConst.UserId)?.Value;//获取用户ID
            if (!string.IsNullOrEmpty(userId))//如果不为空
                return $"{userId}_{RandomHelper.CreateLetterAndNumber(5)}";//返回用户ID
            else
                return connection.ConnectionId;
        }
    }
}