#nullable enable using System; using System.Collections.Generic; using System.Text.Json; using Microsoft.Extensions.Caching.Distributed; using SimApi.Communications; namespace SimApi.Helpers; /// /// 认证助手 /// public class SimApiAuth(IDistributedCache cache) { /// /// 产生一个Token记录并返回Token /// /// /// /// /// /// public string Login(string id, Dictionary? meta = null, string type = "user", string? token = null) { return Login(id, meta, new[] { type }, token); } /// /// 产生一个Token并记录用户ID角色[多角色] /// /// /// /// /// /// // ReSharper disable once MemberCanBePrivate.Global public string Login(string id, Dictionary? meta, string[] type, string? uuid = null) { uuid ??= Guid.NewGuid().ToString(); var loginItem = new SimApiLoginItem(id, type, meta); cache.SetString(uuid, JsonSerializer.Serialize(loginItem)); return uuid; } /// /// 设置登录的Meta信息 /// /// /// /// public bool SetMeta(string token, Dictionary meta) { var login = GetLogin(token); if (login == null) { return false; } var newLogin = new SimApiLoginItem(login.Id, login.Type, login.Meta); cache.SetString(token,JsonSerializer.Serialize(newLogin)); return true; } /// /// 获取登陆信息 /// /// /// public SimApiLoginItem? GetLogin(string token) { var login = cache.GetString(token); return login != null ? JsonSerializer.Deserialize(login) : default; } /// /// 退出登陆 /// /// 登陆标识 public void Logout(string uuid) { if (!string.IsNullOrEmpty(uuid)) { cache.Remove(uuid); } } }