找回密码 第二部分 (#19)

This commit is contained in:
milimoe 2023-07-03 09:27:23 +08:00 committed by GitHub
parent ac2cf9ee67
commit 49c2f9e065
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 221 additions and 155 deletions

View File

@ -170,7 +170,7 @@ bool Read(ClientSocket socket)
foreach (SocketObject read in socket.ReceiveArray()) foreach (SocketObject read in socket.ReceiveArray())
{ {
SocketMessageType type = read.SocketType; SocketMessageType type = read.SocketType;
if (type == SocketMessageType.Connect) if (type == SocketMessageType.RunTime_Connect)
{ {
if (read.Parameters.Length > 0) if (read.Parameters.Length > 0)
{ {
@ -190,7 +190,7 @@ bool Send(ClientSocket socket, Guid Token)
{ {
// 发送消息给客户端 // 发送消息给客户端
string msg = Config.ServerName + ";" + Config.ServerNotice; string msg = Config.ServerName + ";" + Config.ServerNotice;
if (socket.Send(SocketMessageType.Connect, msg, Token) == SocketResult.Success) if (socket.Send(SocketMessageType.RunTime_Connect, msg, Token) == SocketResult.Success)
{ {
ServerHelper.WriteLine(ServerHelper.MakeClientName(socket.ClientIP) + " <- " + "已确认连接"); ServerHelper.WriteLine(ServerHelper.MakeClientName(socket.ClientIP) + " <- " + "已确认连接");
return true; return true;
@ -204,7 +204,7 @@ bool SendRefuseConnect(ClientSocket socket, string msg)
{ {
// 发送消息给客户端 // 发送消息给客户端
msg = $"连接被拒绝,如有疑问请联系服务器管理员:{msg}"; msg = $"连接被拒绝,如有疑问请联系服务器管理员:{msg}";
if (socket.Send(SocketMessageType.Connect, msg) == SocketResult.Success) if (socket.Send(SocketMessageType.RunTime_Connect, msg) == SocketResult.Success)
{ {
ServerHelper.WriteLine(ServerHelper.MakeClientName(socket.ClientIP) + " <- " + "已拒绝连接"); ServerHelper.WriteLine(ServerHelper.MakeClientName(socket.ClientIP) + " <- " + "已拒绝连接");
return true; return true;

View File

@ -0,0 +1,142 @@
using System.Collections;
using Milimoe.FunGame.Core.Api.Utility;
using Milimoe.FunGame.Core.Library.Common.Network;
using Milimoe.FunGame.Core.Library.Constant;
using Milimoe.FunGame.Core.Library.SQLScript.Common;
using Milimoe.FunGame.Core.Library.SQLScript.Entity;
using Milimoe.FunGame.Server.Others;
using Milimoe.FunGame.Server.Utility;
namespace Milimoe.FunGame.Server.Model
{
public partial class ServerModel
{
/// <summary>
/// 接收并验证找回密码时的验证码
/// </summary>
/// <param name="RequestData"></param>
/// <param name="ResultData"></param>
private void DataRequest_ForgetPassword(Hashtable RequestData, Hashtable ResultData)
{
string msg = "无法找回您的密码,请稍后再试。"; // 返回的验证信息
if (RequestData.Count >= 2)
{
ServerHelper.WriteLine("[" + ServerSocket.GetTypeString(SocketMessageType.DataRequest) + "] " + ServerHelper.MakeClientName(ClientName, User) + " -> ForgetPassword");
string username = NetworkUtility.JsonDeserializeFromHashtable<string>(RequestData, ForgetVerifyCodes.Column_Username) ?? "";
string email = NetworkUtility.JsonDeserializeFromHashtable<string>(RequestData, ForgetVerifyCodes.Column_Email) ?? "";
string verifycode = NetworkUtility.JsonDeserializeFromHashtable<string>(RequestData, ForgetVerifyCodes.Column_ForgetVerifyCode) ?? "";
// 客户端发来了验证码就进行验证,没有发就生成
if (verifycode.Trim() != "")
{
// 先检查验证码
SQLHelper.ExecuteDataSet(ForgetVerifyCodes.Select_ForgetVerifyCode(username, email, verifycode));
if (SQLHelper.Result == SQLResult.Success)
{
// 检查验证码是否过期
DateTime SendTime = (DateTime)SQLHelper.DataSet.Tables[0].Rows[0][ForgetVerifyCodes.Column_SendTime];
if ((DateTime.Now - SendTime).TotalMinutes >= 10)
{
ServerHelper.WriteLine(ServerHelper.MakeClientName(ClientName, User) + " 验证码已过期");
msg = "此验证码已过期,请重新找回密码。";
SQLHelper.Execute(ForgetVerifyCodes.Delete_ForgetVerifyCode(username, email));
}
else
{
// 检查验证码是否正确
if (ForgetVerify.Equals(SQLHelper.DataSet.Tables[0].Rows[0][ForgetVerifyCodes.Column_ForgetVerifyCode]))
{
ServerHelper.WriteLine("[ForgerPassword] UserName: " + username + " Email: " + email);
SQLHelper.Execute(ForgetVerifyCodes.Delete_ForgetVerifyCode(username, email));
msg = "";
}
else msg = "验证码不正确,请重新输入!";
}
}
else msg = "验证码不正确,请重新输入!";
}
else
{
// 检查账号和邮箱是否匹配
SQLHelper.ExecuteDataSet(UserQuery.Select_CheckEmailWithUsername(username, email));
if (SQLHelper.Result != SQLResult.Success)
{
msg = "此邮箱未绑定此账号,请重试!";
}
else
{
// 检查验证码是否发送过和是否过期
SQLHelper.ExecuteDataSet(ForgetVerifyCodes.Select_HasSentForgetVerifyCode(username, email));
if (SQLHelper.Result != SQLResult.Success || (DateTime.Now - ((DateTime)SQLHelper.DataSet.Tables[0].Rows[0][ForgetVerifyCodes.Column_SendTime])).TotalMinutes >= 10)
{
// 发送验证码,需要先删除之前过期的验证码
SQLHelper.Execute(ForgetVerifyCodes.Delete_ForgetVerifyCode(username, email));
ForgetVerify = Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 6);
SQLHelper.Execute(ForgetVerifyCodes.Insert_ForgetVerifyCode(username, email, ForgetVerify));
if (SQLHelper.Result == SQLResult.Success)
{
if (MailSender != null)
{
// 发送验证码
string ServerName = Config.ServerName;
string Subject = $"[{ServerName}] FunGame 找回密码验证码";
string Body = $"亲爱的 {username} <br/> 您正在找回[{ServerName}]账号的密码,您的验证码是 {ForgetVerify} 10分钟内有效请及时输入<br/><br/>{ServerName}<br/>{DateTimeUtility.GetDateTimeToString(TimeType.DateOnly)}";
string[] To = new string[] { email };
if (MailSender.Send(MailSender.CreateMail(Subject, Body, System.Net.Mail.MailPriority.Normal, true, To)) == MailSendResult.Success)
{
ServerHelper.WriteLine(ServerHelper.MakeClientName(ClientName, User) + $" 已向{email}发送验证码:{ForgetVerify}");
msg = "";
}
else
{
ServerHelper.WriteLine(ServerHelper.MakeClientName(ClientName, User) + " 无法发送验证码");
ServerHelper.WriteLine(MailSender.ErrorMsg);
}
}
else // 不使用MailSender的情况
{
ServerHelper.WriteLine(ServerHelper.MakeClientName(ClientName, User) + $" 验证码为:{ForgetVerify},请服务器管理员告知此用户");
msg = "";
}
}
}
else
{
// 发送过验证码且验证码没有过期
string ForgetVerifyCode = (string)SQLHelper.DataSet.Tables[0].Rows[0][ForgetVerifyCodes.Column_ForgetVerifyCode];
ServerHelper.WriteLine(ServerHelper.MakeClientName(ClientName, User) + $" 十分钟内已向{email}发送过验证码:{ForgetVerifyCode}");
msg = "";
}
}
}
}
ResultData.Add("msg", msg);
}
/// <summary>
/// 更新用户的密码
/// </summary>
/// <param name="RequestData"></param>
/// <param name="ResultData"></param>
private void DataRequest_UpdatePassword(Hashtable RequestData, Hashtable ResultData)
{
string msg = "无法更新您的密码,请稍后再试。";
if (RequestData.Count >= 2)
{
ServerHelper.WriteLine("[" + ServerSocket.GetTypeString(SocketMessageType.DataRequest) + "] " + ServerHelper.MakeClientName(ClientName, User) + " -> UpdatePassword");
string username = NetworkUtility.JsonDeserializeFromHashtable<string>(RequestData, UserQuery.Column_Username) ?? "";
string password = NetworkUtility.JsonDeserializeFromHashtable<string>(RequestData, UserQuery.Column_Password) ?? "";
if (username.Trim() != "" && password.Trim() != "")
{
SQLHelper.Execute(UserQuery.Update_Password(username, password));
if (SQLHelper.Success)
{
// 更新成功返回空值
msg = "";
}
}
}
ResultData.Add("msg", msg);
}
}
}

View File

@ -13,7 +13,7 @@ using Milimoe.FunGame.Server.Utility;
namespace Milimoe.FunGame.Server.Model namespace Milimoe.FunGame.Server.Model
{ {
public class ServerModel : IServerModel public partial class ServerModel : IServerModel
{ {
/** /**
* Public * Public
@ -71,7 +71,7 @@ namespace Milimoe.FunGame.Server.Model
string msg = ""; string msg = "";
// 验证Token // 验证Token
if (type != SocketMessageType.HeartBeat && token != Token) if (type != SocketMessageType.RunTime_HeartBeat && token != Token)
{ {
ServerHelper.WriteLine(ServerHelper.MakeClientName(ClientName, User) + " 使用了非法方式传输消息,服务器拒绝回应 -> [" + ServerSocket.GetTypeString(type) + "] "); ServerHelper.WriteLine(ServerHelper.MakeClientName(ClientName, User) + " 使用了非法方式传输消息,服务器拒绝回应 -> [" + ServerSocket.GetTypeString(type) + "] ");
return false; return false;
@ -83,8 +83,8 @@ namespace Milimoe.FunGame.Server.Model
} }
// 如果不等于这些Type就不会输出一行记录。这些Type有特定的输出。 // 如果不等于这些Type就不会输出一行记录。这些Type有特定的输出。
SocketMessageType[] IgnoreType = new SocketMessageType[] { SocketMessageType.HeartBeat, SocketMessageType.Login, SocketMessageType.IntoRoom, SocketMessageType[] IgnoreType = new SocketMessageType[] { SocketMessageType.RunTime_HeartBeat, SocketMessageType.RunTime_Login, SocketMessageType.Main_IntoRoom,
SocketMessageType.Chat}; SocketMessageType.Main_Chat};
if (!IgnoreType.Contains(type)) if (!IgnoreType.Contains(type))
{ {
if (msg.Trim() == "") if (msg.Trim() == "")
@ -95,11 +95,11 @@ namespace Milimoe.FunGame.Server.Model
switch (type) switch (type)
{ {
case SocketMessageType.GetNotice: case SocketMessageType.Main_GetNotice:
msg = Config.ServerNotice; msg = Config.ServerNotice;
break; break;
case SocketMessageType.Login: case SocketMessageType.RunTime_Login:
CheckLoginKey = Guid.Empty; CheckLoginKey = Guid.Empty;
if (args != null) if (args != null)
{ {
@ -138,7 +138,7 @@ namespace Milimoe.FunGame.Server.Model
} }
return Send(socket, type, CheckLoginKey, msg); return Send(socket, type, CheckLoginKey, msg);
case SocketMessageType.CheckLogin: case SocketMessageType.RunTime_CheckLogin:
if (args != null && args.Length > 0) if (args != null && args.Length > 0)
{ {
Guid checkloginkey = SocketObject.GetParam<Guid>(0); Guid checkloginkey = SocketObject.GetParam<Guid>(0);
@ -160,7 +160,7 @@ namespace Milimoe.FunGame.Server.Model
} }
return Send(socket, type, CheckLoginKey.ToString()); return Send(socket, type, CheckLoginKey.ToString());
case SocketMessageType.Logout: case SocketMessageType.RunTime_Logout:
Guid checklogoutkey = Guid.Empty; Guid checklogoutkey = Guid.Empty;
if (args != null && args.Length > 0) if (args != null && args.Length > 0)
{ {
@ -178,15 +178,15 @@ namespace Milimoe.FunGame.Server.Model
ServerHelper.WriteLine("客户端发送了错误的秘钥,不允许本次登出。"); ServerHelper.WriteLine("客户端发送了错误的秘钥,不允许本次登出。");
return Send(socket, type, checklogoutkey); return Send(socket, type, checklogoutkey);
case SocketMessageType.Disconnect: case SocketMessageType.RunTime_Disconnect:
msg = "你已成功断开与服务器的连接: " + Config.ServerName + "。 "; msg = "你已成功断开与服务器的连接: " + Config.ServerName + "。 ";
break; break;
case SocketMessageType.HeartBeat: case SocketMessageType.RunTime_HeartBeat:
msg = ""; msg = "";
break; break;
case SocketMessageType.IntoRoom: case SocketMessageType.Main_IntoRoom:
msg = "-1"; msg = "-1";
if (args != null && args.Length > 0) msg = SocketObject.GetParam<string>(0)!; if (args != null && args.Length > 0) msg = SocketObject.GetParam<string>(0)!;
RoomID = msg; RoomID = msg;
@ -200,14 +200,14 @@ namespace Milimoe.FunGame.Server.Model
{ {
if (Client != null && User.Id != 0) if (Client != null && User.Id != 0)
{ {
Client.Send(Client.Socket!, SocketMessageType.Chat, User.Username, DateTimeUtility.GetNowShortTime() + " [ " + User.Username + " ] 进入了房间。"); Client.Send(Client.Socket!, SocketMessageType.Main_Chat, User.Username, DateTimeUtility.GetNowShortTime() + " [ " + User.Username + " ] 进入了房间。");
} }
} }
} }
} }
break; break;
case SocketMessageType.Chat: case SocketMessageType.Main_Chat:
if (args != null && args.Length > 0) msg = SocketObject.GetParam<string>(0)!; if (args != null && args.Length > 0) msg = SocketObject.GetParam<string>(0)!;
ServerHelper.WriteLine(msg); ServerHelper.WriteLine(msg);
foreach (ServerModel Client in Server.GetUsersList.Cast<ServerModel>()) foreach (ServerModel Client in Server.GetUsersList.Cast<ServerModel>())
@ -216,13 +216,13 @@ namespace Milimoe.FunGame.Server.Model
{ {
if (Client != null && User.Id != 0) if (Client != null && User.Id != 0)
{ {
Client.Send(Client.Socket!, SocketMessageType.Chat, User.Username, DateTimeUtility.GetNowShortTime() + msg); Client.Send(Client.Socket!, SocketMessageType.Main_Chat, User.Username, DateTimeUtility.GetNowShortTime() + msg);
} }
} }
} }
return true; return true;
case SocketMessageType.Reg: case SocketMessageType.RunTime_Reg:
if (args != null) if (args != null)
{ {
string? username = "", email = ""; string? username = "", email = "";
@ -289,7 +289,7 @@ namespace Milimoe.FunGame.Server.Model
} }
return true; return true;
case SocketMessageType.CheckReg: case SocketMessageType.RunTime_CheckReg:
if (args != null) if (args != null)
{ {
string? username = "", password = "", email = "", verifycode = ""; string? username = "", password = "", email = "", verifycode = "";
@ -340,7 +340,7 @@ namespace Milimoe.FunGame.Server.Model
else msg = "注册失败!"; else msg = "注册失败!";
return Send(socket, type, false, msg); return Send(socket, type, false, msg);
case SocketMessageType.UpdateRoom: case SocketMessageType.Main_UpdateRoom:
Config.RoomList ??= new(); Config.RoomList ??= new();
Config.RoomList.Clear(); Config.RoomList.Clear();
DataSet DsRoomTemp = new(), DsUserTemp = new(); DataSet DsRoomTemp = new(), DsUserTemp = new();
@ -350,7 +350,7 @@ namespace Milimoe.FunGame.Server.Model
Config.RoomList.AddRooms(rooms); // 更新服务器中的房间列表 Config.RoomList.AddRooms(rooms); // 更新服务器中的房间列表
return Send(socket, type, rooms); // 传RoomList return Send(socket, type, rooms); // 传RoomList
case SocketMessageType.CreateRoom: case SocketMessageType.Main_CreateRoom:
msg = "-1"; msg = "-1";
if (args != null) if (args != null)
{ {
@ -368,7 +368,7 @@ namespace Milimoe.FunGame.Server.Model
GameMode.GameMode_Team => RoomType.Team, GameMode.GameMode_Team => RoomType.Team,
GameMode.GameMode_MixHasPass => RoomType.MixHasPass, GameMode.GameMode_MixHasPass => RoomType.MixHasPass,
GameMode.GameMode_TeamHasPass => RoomType.TeamHasPass, GameMode.GameMode_TeamHasPass => RoomType.TeamHasPass,
_ => RoomType.None _ => RoomType.All
}; };
string roomid = Verification.CreateVerifyCode(VerifyCodeType.MixVerifyCode, 7).ToUpper(); string roomid = Verification.CreateVerifyCode(VerifyCodeType.MixVerifyCode, 7).ToUpper();
SQLHelper.Execute(RoomQuery.Insert_CreateRoom(roomid, userid, roomtype, password ?? "")); SQLHelper.Execute(RoomQuery.Insert_CreateRoom(roomid, userid, roomtype, password ?? ""));
@ -380,7 +380,7 @@ namespace Milimoe.FunGame.Server.Model
} }
break; break;
case SocketMessageType.QuitRoom: case SocketMessageType.Main_QuitRoom:
if (args != null) if (args != null)
{ {
string? roomid = ""; string? roomid = "";
@ -422,10 +422,10 @@ namespace Milimoe.FunGame.Server.Model
{ {
if (Client != null && User.Id != 0) if (Client != null && User.Id != 0)
{ {
Client.Send(Client.Socket!, SocketMessageType.Chat, User.Username, DateTimeUtility.GetNowShortTime() + " [ " + User.Username + " ] 离开了房间。"); Client.Send(Client.Socket!, SocketMessageType.Main_Chat, User.Username, DateTimeUtility.GetNowShortTime() + " [ " + User.Username + " ] 离开了房间。");
if (UpdateRoomMaster.Id != 0 && Room.Roomid != "-1") if (UpdateRoomMaster.Id != 0 && Room.Roomid != "-1")
{ {
Client.Send(Client.Socket!, SocketMessageType.UpdateRoomMaster, User, Room); Client.Send(Client.Socket!, SocketMessageType.Room_UpdateRoomMaster, User, Room);
} }
} }
} }
@ -436,13 +436,13 @@ namespace Milimoe.FunGame.Server.Model
} }
return Send(socket, type, false); return Send(socket, type, false);
case SocketMessageType.MatchRoom: case SocketMessageType.Main_MatchRoom:
break; break;
case SocketMessageType.ChangeRoomSetting: case SocketMessageType.Room_ChangeRoomSetting:
break; break;
case SocketMessageType.GetRoomPlayerCount: case SocketMessageType.Room_GetRoomPlayerCount:
if (args != null) if (args != null)
{ {
string? roomid = "-1"; string? roomid = "-1";
@ -465,6 +465,45 @@ namespace Milimoe.FunGame.Server.Model
} }
} }
public bool DataRequestHandler(ClientSocket socket, SocketObject SocketObject)
{
Hashtable ResultData = new();
DataRequestType type = DataRequestType.UnKnown;
if (SocketObject.Parameters.Length > 0)
{
try
{
type = SocketObject.GetParam<DataRequestType>(0);
Hashtable RequestData = SocketObject.GetParam<Hashtable>(1) ?? new();
SQLHelper.NewTransaction();
switch (type)
{
case DataRequestType.UnKnown:
break;
case DataRequestType.Login_GetFindPasswordVerifyCode:
DataRequest_ForgetPassword(RequestData, ResultData);
break;
case DataRequestType.Login_UpdatePassword:
DataRequest_UpdatePassword(RequestData, ResultData);
break;
}
SQLHelper.Commit();
}
catch (Exception e)
{
ServerHelper.Error(e);
SQLHelper.Rollback();
return Send(socket, SocketMessageType.DataRequest, type, ResultData);
}
}
return Send(socket, SocketMessageType.DataRequest, type, ResultData);
}
public bool Send(ClientSocket socket, SocketMessageType type, params object[] objs) public bool Send(ClientSocket socket, SocketMessageType type, params object[] objs)
{ {
// 发送消息给客户端 // 发送消息给客户端
@ -474,14 +513,14 @@ namespace Milimoe.FunGame.Server.Model
{ {
switch (type) switch (type)
{ {
case SocketMessageType.Logout: case SocketMessageType.RunTime_Logout:
RemoveUser(); RemoveUser();
break; break;
case SocketMessageType.Disconnect: case SocketMessageType.RunTime_Disconnect:
RemoveUser(); RemoveUser();
Close(); Close();
break; break;
case SocketMessageType.Chat: case SocketMessageType.Main_Chat:
return true; return true;
} }
object obj = objs[0]; object obj = objs[0];
@ -498,7 +537,7 @@ namespace Milimoe.FunGame.Server.Model
return false; return false;
} }
} }
public void Start() public void Start()
{ {
Task StreamReader = Task.Factory.StartNew(CreateStreamReader); Task StreamReader = Task.Factory.StartNew(CreateStreamReader);
@ -511,128 +550,6 @@ namespace Milimoe.FunGame.Server.Model
_ClientName = ClientName; _ClientName = ClientName;
} }
private bool DataRequestHandler(ClientSocket socket, SocketObject SocketObject)
{
Hashtable RequestData = new();
Hashtable ResultData = new();
DataRequestType type = DataRequestType.UnKnown;
if (SocketObject.Parameters.Length > 0)
{
try
{
type = SocketObject.GetParam<DataRequestType>(0);
RequestData = SocketObject.GetParam<Hashtable>(1) ?? new();
switch (type)
{
case DataRequestType.UnKnown:
break;
case DataRequestType.GetFindPasswordVerifyCode:
if (RequestData.Count >= 2)
{
ServerHelper.WriteLine("[" + ServerSocket.GetTypeString(SocketMessageType.DataRequest) + "] " + ServerHelper.MakeClientName(ClientName, User) + " -> ForgetPassword");
string username = (string?)(RequestData[ForgetVerifyCodes.Column_Username]) ?? "";
string email = (string?)(RequestData[ForgetVerifyCodes.Column_Email]) ?? "";
string verifycode = (string?)RequestData[ForgetVerifyCodes.Column_ForgetVerifyCode] ?? "";
string msg = ""; // 返回错误信息
// 客户端发来了验证码就进行验证,没有发就生成
if (verifycode.Trim() != "")
{
// 先检查验证码
SQLHelper.ExecuteDataSet(ForgetVerifyCodes.Select_ForgetVerifyCode(username, email, verifycode));
if (SQLHelper.Result == SQLResult.Success)
{
// 检查验证码是否过期
DateTime SendTime = (DateTime)SQLHelper.DataSet.Tables[0].Rows[0][ForgetVerifyCodes.Column_SendTime];
if ((DateTime.Now - SendTime).TotalMinutes >= 10)
{
ServerHelper.WriteLine(ServerHelper.MakeClientName(ClientName, User) + " 验证码已过期");
msg = "此验证码已过期,请重新找回密码。";
SQLHelper.Execute(ForgetVerifyCodes.Delete_ForgetVerifyCode(username, email));
}
else
{
// 找回密码
if (ForgetVerify.Equals(SQLHelper.DataSet.Tables[0].Rows[0][ForgetVerifyCodes.Column_ForgetVerifyCode]))
{
ServerHelper.WriteLine("[ForgerPassword] UserName: " + username + " Email: " + email);
// TODO. 等更新UpdatePassword
if (true)
{
//msg = "找回密码!请牢记您的新密码!";
//SQLHelper.Execute(ForgetVerifyCodes.Delete_ForgetVerifyCode(username, email), out _);
}
//else msg = "服务器无法处理您的注册,注册失败!";
}
else msg = "验证码不正确,请重新输入!";
}
}
else msg = "无法找回您的密码,请稍后再试。";
}
else
{
// 检查验证码是否发送过
SQLHelper.ExecuteDataSet(ForgetVerifyCodes.Select_HasSentForgetVerifyCode(username, email));
if (SQLHelper.Result == SQLResult.Success)
{
DateTime SendTime = (DateTime)SQLHelper.DataSet.Tables[0].Rows[0][ForgetVerifyCodes.Column_SendTime];
string ForgetVerifyCode = (string)SQLHelper.DataSet.Tables[0].Rows[0][ForgetVerifyCodes.Column_ForgetVerifyCode];
if ((DateTime.Now - SendTime).TotalMinutes < 10)
{
ServerHelper.WriteLine(ServerHelper.MakeClientName(ClientName, User) + $" 十分钟内已向{email}发送过验证码:{ForgetVerifyCode}");
}
else
{
// 发送验证码,需要先删除之前过期的验证码
SQLHelper.Execute(ForgetVerifyCodes.Delete_ForgetVerifyCode(username, email));
ForgetVerify = Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 6);
SQLHelper.Execute(ForgetVerifyCodes.Insert_ForgetVerifyCode(username, email, ForgetVerify));
if (SQLHelper.Result == SQLResult.Success)
{
if (MailSender != null)
{
// 发送验证码
string ServerName = Config.ServerName;
string Subject = $"[{ServerName}] FunGame 找回密码验证码";
string Body = $"亲爱的 {username} <br/> 您正在找回[{ServerName}]账号的密码,您的验证码是 {ForgetVerify} 10分钟内有效请及时输入<br/><br/>{ServerName}<br/>{DateTimeUtility.GetDateTimeToString(TimeType.DateOnly)}";
string[] To = new string[] { email };
if (MailSender.Send(MailSender.CreateMail(Subject, Body, System.Net.Mail.MailPriority.Normal, true, To)) == MailSendResult.Success)
{
ServerHelper.WriteLine(ServerHelper.MakeClientName(ClientName, User) + $" 已向{email}发送验证码:{ForgetVerify}");
}
else
{
ServerHelper.WriteLine(ServerHelper.MakeClientName(ClientName, User) + " 无法发送验证码");
ServerHelper.WriteLine(MailSender.ErrorMsg);
}
}
else // 不使用MailSender的情况
{
ServerHelper.WriteLine(ServerHelper.MakeClientName(ClientName, User) + $" 验证码为:{ForgetVerify},请服务器管理员告知此用户");
}
}
else msg = "无法找回您的密码,请稍后再试。";
}
}
else msg = "无法找回您的密码,请稍后再试。";
}
ResultData.Add("msg", msg);
}
else ResultData.Add("msg", "无法找回您的密码,请稍后再试。");
break;
}
}
catch (Exception e)
{
ServerHelper.Error(e);
return false;
}
}
return Send(socket, SocketMessageType.DataRequest, type, ResultData);
}
private void KickUser() private void KickUser()
{ {
if (User.Id != 0) if (User.Id != 0)
@ -642,7 +559,7 @@ namespace Milimoe.FunGame.Server.Model
{ {
ServerHelper.WriteLine("OnlinePlayers: 玩家 " + user + " 重复登录!"); ServerHelper.WriteLine("OnlinePlayers: 玩家 " + user + " 重复登录!");
ServerModel serverTask = (ServerModel)Server.GetUser(user); ServerModel serverTask = (ServerModel)Server.GetUser(user);
serverTask?.Send(serverTask.Socket!, SocketMessageType.ForceLogout, serverTask.CheckLoginKey, "您的账号在别处登录,已强制下线。"); serverTask?.Send(serverTask.Socket!, SocketMessageType.RunTime_ForceLogout, serverTask.CheckLoginKey, "您的账号在别处登录,已强制下线。");
} }
} }
} }

View File

@ -0,0 +1,7 @@
namespace Milimoe.FunGame.Server.Model
{
public partial class ServerModel
{
}
}