XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

XFEExtension.NetCore.ServerInteractive

[DLL] Server interaction extension, including user identity verification and querying in conjunction with AutoConfig

公开
关注 0 Fork 0 Star 0
返回提交历史

XFEstudio/XFEExtension.NetCore.ServerInteractive

为服务器和客户端的用户登录服务添加泛型T,用以在登录时返回用户信息

88d878f
XFE工作室室长 <mail@xfegzs.com>
提交于

代码差异

10 个文件 +97 -30
Modified XFEExtension.NetCore.ServerInteractive.TServer/Program.cs +3 -2
@@ -1,4 +1,5 @@
1 using XFEExtension.NetCore.ServerInteractive.Models.UserModels;
1 using XFEExtension.NetCore.ServerInteractive.Interfaces;
2 using XFEExtension.NetCore.ServerInteractive.Models.UserModels;
2 3 using XFEExtension.NetCore.ServerInteractive.TServer;
3 4 using XFEExtension.NetCore.ServerInteractive.TServer.Models;
4 5 using XFEExtension.NetCore.ServerInteractive.TServer.Profiles;
@@ -10,7 +11,7 @@ var server = XFEServerBuilder.CreateBuilder() //创建服务器构建器
10 11 .UseXFEServer() //使用XFE服务器架构
11 12 .AddCoreServer( //添加核心服务器
12 13 XFEServerCoreBuilder.CreateBuilder() //创建核心服务器构建器
13 .UseXFEStandardServerCore( //使用XFE标准服务器核心
14 .UseXFEStandardServerCore<IUserFaceInfo>( //使用XFE标准服务器核心
14 15 static () => UserProfile.UserTable, //获取用户表的方法
15 16 static () => UserProfile.EncryptedUserLoginModelTable, //获取用户加密模型的方法
16 17 UserProfile.EncryptedUserLoginModelTable.Add, //添加用户加密模型的方法
Modified XFEExtension.NetCore.ServerInteractive.Test/Program.cs +13 -8
@@ -1,4 +1,6 @@
1 1 using System.Text.Json;
2 using XFEExtension.NetCore.ServerInteractive.Models;
3 using XFEExtension.NetCore.ServerInteractive.Models.RequesterModels;
2 4 using XFEExtension.NetCore.ServerInteractive.TServer.Models;
3 5 using XFEExtension.NetCore.ServerInteractive.Utilities;
4 6 using XFEExtension.NetCore.ServerInteractive.Utilities.Helpers;
@@ -7,14 +9,14 @@ using XFEExtension.NetCore.ServerInteractive.Utilities.Requester;
7 9 internal class Program
8 10 {
9 11 static readonly XFEClientRequester xFEClientRequester = XFEClientRequesterBuilder.CreateBuilder("http://localhost:8080/api", string.Empty, DeviceHelper.GetUniqueHardwareId())
10 .UseXFEStandardRequest()
12 .UseXFEStandardRequest<UserFaceInfo>()
11 13 .Build();
12 14
13 15 static readonly TableRequester tableRequester = new();
14 16
15 17 static Program() => xFEClientRequester.MessageReceived += XFEClientRequester_MessageReceived;
16 18
17 private static void XFEClientRequester_MessageReceived(object? sender, XFEExtension.NetCore.ServerInteractive.Models.RequesterModels.ServerInteractiveEventArgs e)
19 private static void XFEClientRequester_MessageReceived(object? sender, ServerInteractiveEventArgs e)
18 20 {
19 21 Console.WriteLine($"请求完成:{e.StatusCode}\t{e.Message}");
20 22 }
@@ -22,13 +24,16 @@ internal class Program
22 24 [SMTest("Admin", "123456")]
23 25 public static async Task Login(string account, string password)
24 26 {
25 var result = await xFEClientRequester.Request<(string session, DateTime expireDate)>("login", account, password);
27 var result = await xFEClientRequester.Request<UserLoginResult<UserFaceInfo>>("login", account, password);
26 28 if (result.StatusCode == System.Net.HttpStatusCode.OK)
27 29 {
28 Console.WriteLine(result.Result.session);
29 Console.WriteLine(result.Result.expireDate);
30 Console.WriteLine(result.Result.Session);
31 Console.WriteLine(result.Result.ExpireDate);
32 Console.WriteLine(result.Result.UserInfo.ID);
33 Console.WriteLine(result.Result.UserInfo.NickName);
34 Console.WriteLine(result.Result.UserInfo.PermissionLevel);
30 35 tableRequester.RequestAddress = xFEClientRequester.RequestAddress;
31 tableRequester.Session = result.Result.session;
36 tableRequester.Session = result.Result.Session;
32 37 tableRequester.ComputerInfo = xFEClientRequester.ComputerInfo;
33 38 }
34 39 else
@@ -49,14 +54,14 @@ internal class Program
49 54 return JsonSerializer.Serialize(order);
50 55 }
51 56
52 [SMTest]
57 //[SMTest]
53 58 public static async Task<bool> AddOrder() => await tableRequester.Add<Order>(new()
54 59 {
55 60 Description = "测试订单的描述",
56 61 Name = "测试订单"
57 62 });
58 63
59 [SMTest]
64 //[SMTest]
60 65 public static async Task GetOrder()
61 66 {
62 67 var result = await tableRequester.Get<Order>();
Added XFEExtension.NetCore.ServerInteractive/Models/RequesterModels/UserLoginResult.cs +27 -0
@@ -0,0 +1,27 @@
1 using System.Text.Json.Serialization;
2 using XFEExtension.NetCore.ServerInteractive.Interfaces;
3
4 namespace XFEExtension.NetCore.ServerInteractive.Models.RequesterModels;
5
6 /// <summary>
7 /// 用户登录结果
8 /// </summary>
9 /// <typeparam name="T">登录返回用户接口类型</typeparam>
10 public class UserLoginResult<T> where T : IUserFaceInfo
11 {
12 /// <summary>
13 /// 用户登录Session
14 /// </summary>
15 [JsonPropertyName("session")]
16 public string Session { get; set; } = string.Empty;
17 /// <summary>
18 /// 用户登录到期日期
19 /// </summary>
20 [JsonPropertyName("expireDate")]
21 public DateTime ExpireDate { get; set; }
22 /// <summary>
23 /// 用户信息
24 /// </summary>
25 [JsonPropertyName("userInfo")]
26 public T UserInfo { get; set; } = default!;
27 }
Added XFEExtension.NetCore.ServerInteractive/Models/UserFaceInfo.cs +16 -0
@@ -0,0 +1,16 @@
1 using XFEExtension.NetCore.ServerInteractive.Interfaces;
2
3 namespace XFEExtension.NetCore.ServerInteractive.Models;
4
5 /// <summary>
6 /// 用户接口信息
7 /// </summary>
8 public class UserFaceInfo : IUserFaceInfo
9 {
10 /// <inheritdoc/>
11 public string ID { get; set; } = string.Empty;
12 /// <inheritdoc/>
13 public string NickName { get; set; } = string.Empty;
14 /// <inheritdoc/>
15 public int PermissionLevel { get; set; }
16 }
Modified XFEExtension.NetCore.ServerInteractive/Utilities/Helpers/UserHelper.cs +2 -2
@@ -18,7 +18,7 @@ public static class UserHelper
18 18 /// <param name="id"></param>
19 19 /// <param name="userInfoList"></param>
20 20 /// <returns></returns>
21 public static IUserInfo? GetUser(string id, IEnumerable<IUserInfo> userInfoList) => userInfoList.FirstOrDefault(user => user.ID == id);
21 public static IUserFaceInfo? GetUser(string id, IEnumerable<IUserFaceInfo> userInfoList) => userInfoList.FirstOrDefault(user => user.ID == id);
22 22
23 23 /// <summary>
24 24 /// 获取用户(通过Session)
@@ -31,7 +31,7 @@ public static class UserHelper
31 31 /// <param name="userInfoList"></param>
32 32 /// <param name="user"></param>
33 33 /// <returns></returns>
34 public static UserOperateResult GetUser(string sessionId, string computerInfo, string ipAddress, JsonSerializerOptions? jsonSerializerOptions, IEnumerable<EncryptedUserLoginModel> encryptedUserLoginModels, IEnumerable<IUserInfo> userInfoList, out IUserInfo? user)
34 public static UserOperateResult GetUser(string sessionId, string computerInfo, string ipAddress, JsonSerializerOptions? jsonSerializerOptions, IEnumerable<EncryptedUserLoginModel> encryptedUserLoginModels, IEnumerable<IUserFaceInfo> userInfoList, out IUserInfo? user)
35 35 {
36 36 user = null;
37 37 if (encryptedUserLoginModels.FirstOrDefault(user => user.UserLoginModel.ComputerInfo == computerInfo) is not EncryptedUserLoginModel encryptedUserLoginModel)
Modified XFEExtension.NetCore.ServerInteractive/Utilities/Requester/Serviecs/LoginRequestService.cs +15 -7
@@ -1,20 +1,28 @@
1 using XFEExtension.NetCore.ServerInteractive.Implements.Requester;
2 using XFEExtension.NetCore.XFETransform.JsonConverter;
1 using System.Text.Json;
2 using XFEExtension.NetCore.ServerInteractive.Implements.Requester;
3 using XFEExtension.NetCore.ServerInteractive.Interfaces;
4 using XFEExtension.NetCore.ServerInteractive.Models.RequesterModels;
5 using XFEExtension.NetCore.ServerInteractive.Utilities.JsonConverter;
3 6
4 7 namespace XFEExtension.NetCore.ServerInteractive.Utilities.Requester.Serviecs;
5 8
6 9 /// <summary>
7 10 /// 登录请求服务
8 11 /// </summary>
9 public class LoginRequestService : XFERequestServiceBase
12 public class LoginRequestService<T> : XFERequestServiceBase where T : IUserFaceInfo
10 13 {
14 readonly JsonSerializerOptions jsonSerializerOptions = new();
15 /// <summary>
16 /// 登录请求服务
17 /// </summary>
18 public LoginRequestService() => jsonSerializerOptions.Converters.Add(new JsonDateTimeConverter());
19
11 20 /// <inheritdoc/>
12 21 public override object AnalyzeResponse(string response)
13 22 {
14 QueryableJsonNode jsonNode = response;
15 string session = jsonNode["session"];
16 XFEClientRequester.Session = session;
17 return (session, DateTime.Parse(jsonNode["expireDate"]));
23 var result = JsonSerializer.Deserialize<UserLoginResult<T>>(response, jsonSerializerOptions);
24 XFEClientRequester.Session = result!.Session;
25 return result;
18 26 }
19 27
20 28 /// <inheritdoc/>
Modified XFEExtension.NetCore.ServerInteractive/Utilities/Server/Services/CoreService/UserLoginService.cs +6 -3
@@ -1,4 +1,5 @@
1 1 using System.Net;
2 using XFEExtension.NetCore.ServerInteractive.Interfaces;
2 3 using XFEExtension.NetCore.ServerInteractive.Models.ServerModels;
3 4 using XFEExtension.NetCore.ServerInteractive.Models.UserModels;
4 5 using XFEExtension.NetCore.ServerInteractive.Utilities.Helpers;
@@ -11,7 +12,7 @@ namespace XFEExtension.NetCore.ServerInteractive.Utilities.Server.Services.CoreS
11 12 /// <summary>
12 13 /// 用户登录服务
13 14 /// </summary>
14 public class UserLoginService : ServerCoreUserServiceBase
15 public class UserLoginService<T> : ServerCoreUserServiceBase where T : IUserFaceInfo
15 16 {
16 17 /// <inheritdoc/>
17 18 public override async Task StandardRequestReceived(string execute, QueryableJsonNode queryableJsonNode, ServerCoreReturnArgs r)
@@ -44,7 +45,8 @@ public class UserLoginService : ServerCoreUserServiceBase
44 45 await r.Args.ReplyAndClose(new
45 46 {
46 47 session = UserHelper.Encrypt(userLogin.Key, userLogin.UserLoginModel),
47 expireDate = userLogin.UserLoginModel.EndDateTime
48 expireDate = userLogin.UserLoginModel.EndDateTime,
49 userInfo = (T)user
48 50 }.ToJson(), HttpStatusCode.OK);
49 51 }
50 52 else
@@ -56,7 +58,8 @@ public class UserLoginService : ServerCoreUserServiceBase
56 58 await r.Args.ReplyAndClose(new
57 59 {
58 60 session = UserHelper.Encrypt(userLogin.Key, userLogin.UserLoginModel),
59 expireDate = userLogin.UserLoginModel.EndDateTime
61 expireDate = userLogin.UserLoginModel.EndDateTime,
62 userInfo = (T)user
60 63 }.ToJson(), HttpStatusCode.OK);
61 64 }
62 65 }
Modified XFEExtension.NetCore.ServerInteractive/Utilities/XFEClientRequesterBuilderExtensions.cs +5 -2
@@ -1,4 +1,5 @@
1 1 using System.Text.Json;
2 using XFEExtension.NetCore.ServerInteractive.Interfaces;
2 3 using XFEExtension.NetCore.ServerInteractive.Models;
3 4 using XFEExtension.NetCore.ServerInteractive.Utilities.JsonConverter;
4 5 using XFEExtension.NetCore.ServerInteractive.Utilities.Requester;
@@ -72,16 +73,18 @@ public static class XFEClientRequesterBuilderExtensions
72 73 /// <summary>
73 74 /// 添加登录服务
74 75 /// </summary>
76 /// <typeparam name="T">登录返回用户接口类型</typeparam>
75 77 /// <param name="xFEClientRequesterBuilder"></param>
76 78 /// <returns></returns>
77 public static XFEClientRequesterBuilder AddLoginRequest(this XFEClientRequesterBuilder xFEClientRequesterBuilder) => xFEClientRequesterBuilder.AddXFERequest<LoginRequestService>("login").AddXFERequest<ReloginRequestService>("relogin");
79 public static XFEClientRequesterBuilder AddLoginRequest<T>(this XFEClientRequesterBuilder xFEClientRequesterBuilder) where T : IUserFaceInfo => xFEClientRequesterBuilder.AddXFERequest<LoginRequestService<T>>("login").AddXFERequest<ReloginRequestService>("relogin");
78 80
79 81 /// <summary>
80 82 /// 使用XFE标准服务器服务请求
81 83 /// </summary>
84 /// <typeparam name="T">登录返回用户接口类型</typeparam>
82 85 /// <param name="xFEClientRequesterBuilder"></param>
83 86 /// <returns></returns>
84 public static XFEClientRequesterBuilder UseXFEStandardRequest(this XFEClientRequesterBuilder xFEClientRequesterBuilder) => xFEClientRequesterBuilder.AddLoginRequest()
87 public static XFEClientRequesterBuilder UseXFEStandardRequest<T>(this XFEClientRequesterBuilder xFEClientRequesterBuilder) where T : IUserFaceInfo => xFEClientRequesterBuilder.AddLoginRequest<T>()
85 88 .AddBannedIpRequest()
86 89 .AddLogRequest()
87 90 .AddCheckConnectRequest();
Modified XFEExtension.NetCore.ServerInteractive/Utilities/XFEServerCoreBuilderExtensions.cs +8 -4
@@ -1,4 +1,5 @@
1 using XFEExtension.NetCore.ServerInteractive.Models.UserModels;
1 using XFEExtension.NetCore.ServerInteractive.Interfaces;
2 using XFEExtension.NetCore.ServerInteractive.Models.UserModels;
2 3 using XFEExtension.NetCore.ServerInteractive.Utilities.DataTable;
3 4 using XFEExtension.NetCore.ServerInteractive.Utilities.Server;
4 5 using XFEExtension.NetCore.ServerInteractive.Utilities.Server.Services.CoreService;
@@ -39,9 +40,10 @@ public static class XFEServerCoreBuilderExtensions
39 40 /// <summary>
40 41 /// 使用XFE标准登录服务
41 42 /// </summary>
43 /// <typeparam name="T">登录返回用户接口类型</typeparam>
42 44 /// <param name="xFEServerCoreBuilder"></param>
43 45 /// <returns></returns>
44 public static XFEServerCoreBuilder AddStandardLoginService(this XFEServerCoreBuilder xFEServerCoreBuilder) => xFEServerCoreBuilder.RegisterStandardAsyncService<UserLoginService>("login")
46 public static XFEServerCoreBuilder AddStandardLoginService<T>(this XFEServerCoreBuilder xFEServerCoreBuilder) where T : IUserFaceInfo => xFEServerCoreBuilder.RegisterStandardAsyncService<UserLoginService<T>>("login")
45 47 .RegisterStandardAsyncService<UserReloginService>("relogin")
46 48 .AddService<UserLoginAutoCleanService>();
47 49
@@ -83,19 +85,21 @@ public static class XFEServerCoreBuilderExtensions
83 85 /// <summary>
84 86 /// 使用XFE标准服务器核心
85 87 /// </summary>
88 /// <typeparam name="T">登录返回用户接口类型</typeparam>
86 89 /// <param name="xFEServerCoreBuilder"></param>
87 90 /// <param name="getUserFunction"></param>
88 91 /// <param name="getEncryptedUserLoginModelFunction"></param>
89 92 /// <param name="addEncryptedUserLoginModelFunction"></param>
90 93 /// <param name="removeEncryptedUserLoginModelFunction"></param>
94 /// <param name="getLoginKeepDays"></param>
91 95 /// <param name="xFEDataTableManagerBuilder"></param>
92 96 /// <returns></returns>
93 public static XFEServerCoreBuilder UseXFEStandardServerCore(this XFEServerCoreBuilder xFEServerCoreBuilder, Func<IEnumerable<User>> getUserFunction, Func<IEnumerable<EncryptedUserLoginModel>> getEncryptedUserLoginModelFunction, Action<EncryptedUserLoginModel> addEncryptedUserLoginModelFunction, Action<EncryptedUserLoginModel> removeEncryptedUserLoginModelFunction, Func<int> getLoginKeepDays, XFEDataTableManagerBuilder xFEDataTableManagerBuilder) => xFEServerCoreBuilder.AddUserParameterBase(getUserFunction, getEncryptedUserLoginModelFunction, addEncryptedUserLoginModelFunction, removeEncryptedUserLoginModelFunction, getLoginKeepDays)
97 public static XFEServerCoreBuilder UseXFEStandardServerCore<T>(this XFEServerCoreBuilder xFEServerCoreBuilder, Func<IEnumerable<User>> getUserFunction, Func<IEnumerable<EncryptedUserLoginModel>> getEncryptedUserLoginModelFunction, Action<EncryptedUserLoginModel> addEncryptedUserLoginModelFunction, Action<EncryptedUserLoginModel> removeEncryptedUserLoginModelFunction, Func<int> getLoginKeepDays, XFEDataTableManagerBuilder xFEDataTableManagerBuilder) where T : IUserFaceInfo => xFEServerCoreBuilder.AddUserParameterBase(getUserFunction, getEncryptedUserLoginModelFunction, addEncryptedUserLoginModelFunction, removeEncryptedUserLoginModelFunction, getLoginKeepDays)
94 98 .AddDataTableManager(xFEDataTableManagerBuilder, getUserFunction, getEncryptedUserLoginModelFunction)
95 99 .AddEntryPotinVerify()
96 100 .AddDailyCounterService()
97 101 .AddXFEErrorProcessService()
98 102 .AddConnectService()
99 .AddStandardLoginService()
103 .AddStandardLoginService<T>()
100 104 .AddIpBannerService();
101 105 }
Modified XFEExtension.NetCore.ServerInteractive/XFEExtension.NetCore.ServerInteractive.csproj +2 -2
@@ -5,7 +5,7 @@
5 5 <ImplicitUsings>enable</ImplicitUsings>
6 6 <Nullable>enable</Nullable>
7 7 <GenerateDocumentationFile>True</GenerateDocumentationFile>
8 <Version>1.0.2</Version>
8 <Version>1.0.3</Version>
9 9 <Title>XFEExtension.NetCore.ServerInteractive</Title>
10 10 <RepositoryUrl>https://github.com/XFEstudio/XFEExtension.NetCore.ServerInteractive</RepositoryUrl>
11 11 <AnalysisLevel>latest</AnalysisLevel>
@@ -21,7 +21,7 @@
21 21 <PackageReleaseNotes>
22 22 ## 调整
23 23
24 修复表格管理器服务接口传参问题
24 为服务器和客户端的用户登录服务添加泛型T,用以在登录时返回用户信息
25 25
26 26 ## 新增
27 27