Files
simapi-net/Helpers/SimApiAuth.cs
T

82 lines
2.4 KiB
C#
Raw Normal View History

2024-03-24 17:31:22 +08:00
#nullable enable
2020-02-04 16:51:15 +08:00
using System;
2024-06-27 04:38:04 +08:00
using System.Collections.Generic;
2020-02-04 16:51:15 +08:00
using System.Text.Json;
using Microsoft.Extensions.Caching.Distributed;
2020-08-05 15:29:56 +08:00
using SimApi.Communications;
2020-02-04 16:51:15 +08:00
2024-03-23 07:29:43 +08:00
namespace SimApi.Helpers;
/// <summary>
/// 认证助手
/// </summary>
public class SimApiAuth(IDistributedCache cache)
2020-02-04 16:51:15 +08:00
{
/// <summary>
2024-03-23 07:29:43 +08:00
/// 产生一个Token记录并返回Token
2020-02-04 16:51:15 +08:00
/// </summary>
2024-03-23 07:29:43 +08:00
/// <param name="id"></param>
2024-03-24 17:31:22 +08:00
/// <param name="type"></param>
2024-06-27 04:38:04 +08:00
/// <param name="meta"></param>
2024-03-24 17:31:22 +08:00
/// <param name="token"></param>
2024-03-23 07:29:43 +08:00
/// <returns></returns>
2024-06-27 04:38:04 +08:00
public string Login(string id, Dictionary<string, string>? meta = null, string type = "user", string? token = null)
2020-02-04 16:51:15 +08:00
{
2024-06-27 04:38:04 +08:00
return Login(id, meta, new[] { type }, token);
2024-03-23 07:29:43 +08:00
}
2020-02-04 16:51:15 +08:00
2024-03-23 07:29:43 +08:00
/// <summary>
/// 产生一个Token并记录用户ID角色[多角色]
/// </summary>
/// <param name="id"></param>
/// <param name="type"></param>
2024-06-27 04:38:04 +08:00
/// <param name="meta"></param>
2024-03-24 17:31:22 +08:00
/// <param name="uuid"></param>
2024-03-23 07:29:43 +08:00
/// <returns></returns>
2024-06-27 04:38:04 +08:00
// ReSharper disable once MemberCanBePrivate.Global
public string Login(string id, Dictionary<string, string>? meta, string[] type, string? uuid = null)
2024-03-23 07:29:43 +08:00
{
uuid ??= Guid.NewGuid().ToString();
2024-06-27 04:38:04 +08:00
var loginItem = new SimApiLoginItem(id, type, meta);
2024-03-23 07:29:43 +08:00
cache.SetString(uuid, JsonSerializer.Serialize(loginItem));
return uuid;
}
2020-02-04 16:51:15 +08:00
2024-06-27 04:38:04 +08:00
/// <summary>
/// 设置登录的Meta信息
/// </summary>
/// <param name="token"></param>
/// <param name="meta"></param>
/// <returns></returns>
public bool SetMeta(string token, Dictionary<string, string> 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;
}
2024-03-24 17:31:22 +08:00
/// <summary>
/// 获取登陆信息
/// </summary>
/// <param name="token"></param>
/// <returns></returns>
public SimApiLoginItem? GetLogin(string token)
{
var login = cache.GetString(token);
return login != null ? JsonSerializer.Deserialize<SimApiLoginItem>(login) : default;
}
2024-03-23 07:29:43 +08:00
/// <summary>
/// 退出登陆
/// </summary>
/// <param name="uuid">登陆标识</param>
public void Logout(string uuid)
{
if (!string.IsNullOrEmpty(uuid))
2020-02-18 08:07:51 +08:00
{
2024-03-23 07:29:43 +08:00
cache.Remove(uuid);
}
2020-02-04 16:51:15 +08:00
}
2023-03-28 06:33:48 +08:00
}