From cf25f3ed6a0deb40c0f855eef55e348a3884f629 Mon Sep 17 00:00:00 2001 From: heiye111 Date: Sun, 24 May 2026 20:11:54 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=90=9C=E7=B4=A2=E5=92=8C?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=A5=BD=E5=8F=8B=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Chat/Chat.cs | 80 +++++++++++++++++++++++++++++++--------- Models/ResultResponse.cs | 6 +++ Tool/GenerateTool.cs | 25 +++++++++++++ 3 files changed, 94 insertions(+), 17 deletions(-) diff --git a/Chat/Chat.cs b/Chat/Chat.cs index 8c78a0b..478990a 100644 --- a/Chat/Chat.cs +++ b/Chat/Chat.cs @@ -4,6 +4,7 @@ using Microsoft.AspNetCore.SignalR; using Microsoft.EntityFrameworkCore; using StackExchange.Redis; using System.Diagnostics; +using System.Security.Cryptography.Xml; using WebAppServer1.ApplicationDbContext; using WebAppServer1.Authentication; using WebAppServer1.Models; @@ -130,8 +131,23 @@ namespace WebAppServer1.Chat await Clients.Caller.SendAsync("SendPrivateMessage", false, message, Context.UserIdentifier,newMesssage.Id); } + //添加好友申请 + public async Task AddFriend(int userId) + { + //var user = await pgSql.Users.FindAsync(userId); + pgSql.Friends.Add(new Friend + { + UserId = int.Parse(Context.UserIdentifier!), + FriendId = userId, + CreatedAt = DateTime.UtcNow, + Status = FriendStatus.Pending + }); + await pgSql.SaveChangesAsync(); + return true; + } + //搜索好友 - public async Task SearchFriends(string username) + public async Task SearchFriends(string username) { User? user = null; @@ -145,12 +161,16 @@ namespace WebAppServer1.Chat user = await pgSql.Users.FirstOrDefaultAsync(a => a.Username == username); } return user == null - ? new SearchFriendsResultResponse { success = false } - : new SearchFriendsResultResponse + ? new { success = false } + : new { success = true, userid = user.Id, - username = user.Nickname + username = user.Username, + nickname = user.Nickname, + avatarurl = user.AvatarUrl, + signature = user.Signature, + isonline = user.IsOnline }; } @@ -193,39 +213,65 @@ namespace WebAppServer1.Chat } //登录认证 - public async Task LoginAuthentication(string username, string password) + public async Task LoginAuthentication(string username, string password, string ua) { - var exists = await pgSql.Users.AnyAsync(a => a.Username == username && a.PasswordHash == password); - if (!exists) + var user = await pgSql.Users.FirstOrDefaultAsync(a => a.Username == username && a.PasswordHash == password); + if (user == null) { - await Clients.Client(Context.ConnectionId).SendAsync("LoginResult",false,"用户名或密码错误!"); - return; + //await Clients.Client(Context.ConnectionId).SendAsync("LoginResult",false,"用户名或密码错误!"); + return new LoginResultResponse { Success = false }; } - var user = await pgSql.Users.FirstOrDefaultAsync(a => a.Username == username); - if (user == null) { return; } + if (user == null) { return new LoginResultResponse { Success = false }; } var accessToken = jwtService.GenerateAccessToken(user.Username,user.Id); var refreshToken = await jwtService.GenerateRefreshToken(user.Id, username); - await Clients.Client(Context.ConnectionId).SendAsync("LoginResult", true, accessToken, refreshToken); + //await Clients.Client(Context.ConnectionId).SendAsync("LoginResult", true, accessToken, refreshToken); logger.LogInformation($"用户:{username}正在进行登录认证!密码:{password}===accessToken:{accessToken}"); + var ip = Context.GetHttpContext()?.Connection?.RemoteIpAddress?.ToString(); + if (ip == null ) { return new LoginResultResponse { Success = false }; } + pgSql.LoginRecords.Add(new LoginRecord + { + UserId = user.Id, + LoginTime = DateTime.UtcNow, + IpAddress = ip, + DeviceInfo = ua, + IsSuccess = true + }); + await pgSql.SaveChangesAsync(); + return new LoginResultResponse + { + Success = true, + AccessToken = accessToken, + RefreshToken = refreshToken, + Nickname = user.Nickname, + Id = user.Id, + IsOnline = true, + AvatarUrl = user.AvatarUrl, + Signature = user.Signature + }; } //新用户注册 - public async Task Register() - { - + public async Task Register() + { var newUser = new User { Username = "user_" + Guid.NewGuid().ToString("N").Substring(0, 8), Nickname = GenerateTool.GenerateRandomNickname(), PasswordHash = GenerateTool.GeneratePassword(), + Signature = GenerateTool.GenerateRandomSignature(), + AvatarUrl = GenerateTool.GenerateRandomAvatarUrl(), CreatedAt = DateTime.UtcNow, LastActive = DateTime.UtcNow }; pgSql.Add(newUser); await pgSql.SaveChangesAsync(); logger.LogInformation($"新用户:{newUser.Username}正在进行登录注册操作!密码:{newUser.Nickname}"); + return new + { + Username = newUser.Username, + Password = newUser.PasswordHash, + Success = true + }; - await LoginAuthentication(newUser.Username,newUser.PasswordHash); - await Clients.Client(Context.ConnectionId).SendAsync("RegisterResult", true, "恭喜注册成功!"); } //统计在线人数 diff --git a/Models/ResultResponse.cs b/Models/ResultResponse.cs index 7a37eba..7adc85d 100644 --- a/Models/ResultResponse.cs +++ b/Models/ResultResponse.cs @@ -26,5 +26,11 @@ namespace WebAppServer1.Models public string Signature { get; set; } = string.Empty; [Key("IsOnline")] public bool IsOnline { get; set; } + [Key("AccessToken")] + public string AccessToken { get; set; } = string.Empty; + [Key("RefreshToken")] + public string RefreshToken { get; set; } = string.Empty; + [Key("Success")] + public bool Success { get; set; } } } diff --git a/Tool/GenerateTool.cs b/Tool/GenerateTool.cs index 6d45359..b99b95d 100644 --- a/Tool/GenerateTool.cs +++ b/Tool/GenerateTool.cs @@ -41,5 +41,30 @@ namespace WebAppServer1.Tool return nickname; } + public static string GenerateRandomSignature() + { + string[] part1 = { "自由的", "快乐的", "孤独的", "勇敢的", "神秘的" }; + string[] part2 = { "小鸟", "星星", "花朵", "少年", "旅人" }; + string[] part3 = { "在唱歌", "在飞翔", "在微笑", "在流浪", "在思考" }; + + var random = new Random(); + string nickname = part1[random.Next(part1.Length)] + + part2[random.Next(part2.Length)] + + part3[random.Next(part3.Length)]; + return nickname; + } + + public static string GenerateRandomAvatarUrl() + { + string[] part1 = { "https://auth.zotv.ru/webapp/"}; + string[] part2 = { "8111", "9666", "6222", "2501", "4974", "3322" }; + string[] part3 = { ".webp" }; + + var random = new Random(); + string nickname = part1[random.Next(part1.Length)] + + part2[random.Next(part2.Length)] + + part3[random.Next(part3.Length)]; + return nickname; + } } }