Merge pull request #70 from Qtoss-AI/hdongDev

Fix userName can't login in email type.
This commit is contained in:
Haiping 2025-01-23 08:23:35 -06:00 committed by GitHub
commit 7af0261a82
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 94 additions and 39 deletions

View file

@ -28,6 +28,7 @@ public interface IBotSharpRepository : IHaveServiceProvider
#region User
User? GetUserByEmail(string email) => throw new NotImplementedException();
User? GetUserByPhone(string phone, string type = UserType.Client, string regionCode = "CN") => throw new NotImplementedException();
User? GetUserByPhoneV2(string phone, string source = UserType.Internal, string regionCode = "CN") => throw new NotImplementedException();
User? GetAffiliateUserByPhone(string phone) => throw new NotImplementedException();
User? GetUserById(string id) => throw new NotImplementedException();
List<User> GetUserByIds(List<string> ids) => throw new NotImplementedException();

View file

@ -28,6 +28,23 @@ public partial class FileRepository
return query.FirstOrDefault();
}
public User? GetUserByPhoneV2(string phone, string? source = UserType.Internal, string regionCode = "CN")
{
var query = Users.Where(x => x.Phone == phone);
if (!string.IsNullOrEmpty(source))
{
query = query.Where(x => x.Type == source);
}
if (!string.IsNullOrEmpty(regionCode))
{
query = query.Where(x => x.RegionCode == regionCode);
}
return query.FirstOrDefault();
}
public User? GetAffiliateUserByPhone(string phone)
{
return Users.FirstOrDefault(x => x.Phone == phone && x.Type == UserType.Affiliate);
@ -172,7 +189,9 @@ public partial class FileRepository
searchResult.Add(user);
}
}
else if (!string.IsNullOrWhiteSpace(filter.UserName))
if (searchResult.Count == 0 && !string.IsNullOrWhiteSpace(filter.UserName))
{
var curUser = Users.AsQueryable().FirstOrDefault(x => x.Source == source && x.UserName == filter.UserName);
User user = curUser != null ? curUser : null;

View file

@ -55,6 +55,11 @@ public class UserService : IUserService
if (record == null && !string.IsNullOrWhiteSpace(user.Phone))
{
//if (user.Type != "internal")
//{
// record = db.GetUserByPhoneV2(user.Phone, regionCode: (string.IsNullOrWhiteSpace(user.RegionCode) ? "CN" : user.RegionCode));
//}
record = db.GetUserByPhone(user.Phone, regionCode: (string.IsNullOrWhiteSpace(user.RegionCode) ? "CN" : user.RegionCode));
}
@ -477,11 +482,17 @@ public class UserService : IUserService
var id = model.UserName;
var db = _services.GetRequiredService<IBotSharpRepository>();
var record = id.Contains("@") ? db.GetUserByEmail(id) : db.GetUserByUserName(id);
if (record == null)
{
record = db.GetUserByPhone(id, regionCode: (string.IsNullOrWhiteSpace(model.RegionCode) ? "CN" : model.RegionCode));
}
//if (record == null)
//{
// record = db.GetUserByPhoneV2(id, regionCode: (string.IsNullOrWhiteSpace(model.RegionCode) ? "CN" : model.RegionCode));
//}
if (record == null)
{
return default;
@ -621,21 +632,12 @@ public class UserService : IUserService
public async Task<User> ResetVerificationCode(User user)
{
var db = _services.GetRequiredService<IBotSharpRepository>();
User record = null;
if (!string.IsNullOrEmpty(user.Email) && !string.IsNullOrEmpty(user.Phone))
if (!string.IsNullOrWhiteSpace(user.Email) && !string.IsNullOrWhiteSpace(user.Phone))
{
return null;
}
if (!string.IsNullOrEmpty(user.Phone))
{
record = db.GetUserByPhone(user.Phone, regionCode: user.RegionCode);
}
if (!string.IsNullOrEmpty(user.Email))
{
record = db.GetUserByEmail(user.Email);
}
User? record = GetLoginUserByUniqueFilter(user, db);
if (record == null)
{
@ -650,6 +652,36 @@ public class UserService : IUserService
return record;
}
private static User? GetLoginUserByUniqueFilter(User user, IBotSharpRepository db)
{
User? record = null;
if (!string.IsNullOrWhiteSpace(user.Id))
{
record = db.GetUserById(user.Id);
}
if (record == null && !string.IsNullOrWhiteSpace(user.Phone))
{
record = db.GetUserByPhone(user.Phone, regionCode: string.IsNullOrWhiteSpace(user.RegionCode) ? "CN" : user.RegionCode);
//if (record == null)
//{
// record = db.GetUserByPhoneV2(user.Phone, regionCode: string.IsNullOrWhiteSpace(user.RegionCode) ? "CN" : user.RegionCode);
//}
}
if (record == null && !string.IsNullOrWhiteSpace(user.Email))
{
record = db.GetUserByEmail(user.Email);
}
if (record == null && !string.IsNullOrWhiteSpace(user.UserName))
{
record = db.GetUserByUserName(user.UserName);
}
return record;
}
public async Task<bool> SendVerificationCodeLogin()
{
var db = _services.GetRequiredService<IBotSharpRepository>();
@ -689,17 +721,7 @@ public class UserService : IUserService
}
var db = _services.GetRequiredService<IBotSharpRepository>();
User? record = null;
if (!string.IsNullOrEmpty(user.Email))
{
record = db.GetUserByEmail(user.Email);
}
if (!string.IsNullOrEmpty(user.Phone))
{
record = db.GetUserByPhone(user.Phone, regionCode: (string.IsNullOrWhiteSpace(user.RegionCode) ? "CN" : user.RegionCode));
}
User? record = GetLoginUserByUniqueFilter(user, db);
if (record == null)
{
@ -724,20 +746,7 @@ public class UserService : IUserService
}
var db = _services.GetRequiredService<IBotSharpRepository>();
User? record = null;
if (!string.IsNullOrEmpty(user.Id))
{
record = db.GetUserById(user.Id);
}
else if (!string.IsNullOrEmpty(user.Phone))
{
record = db.GetUserByPhone(user.Phone, regionCode: (string.IsNullOrWhiteSpace(user.RegionCode) ? "CN" : user.RegionCode));
}
else if (!string.IsNullOrEmpty(user.Email))
{
record = db.GetUserByEmail(user.Email);
}
User? record = GetLoginUserByUniqueFilter(user, db);
if (record == null)
{

View file

@ -37,6 +37,30 @@ public partial class MongoRepository
return user != null ? user.ToUser() : null;
}
public User? GetUserByPhoneV2(string phone, string source = UserType.Internal, string regionCode = "CN")
{
string phoneSecond = string.Empty;
// if phone number length is less than 4, return null
if (string.IsNullOrWhiteSpace(phone) || phone?.Length < 4)
{
return null;
}
if (regionCode == "CN")
{
phoneSecond = (phone ?? "").StartsWith("+86") ? (phone ?? "").Replace("+86", "") : ($"+86{phone ?? ""}");
}
else
{
phoneSecond = (phone ?? "").Substring(regionCode == "US" ? 2 : 3);
}
var user = _dc.Users.AsQueryable().FirstOrDefault(x => (x.Phone == phone || x.Phone == phoneSecond)
&& (x.RegionCode == regionCode || string.IsNullOrWhiteSpace(x.RegionCode))
&& (x.Source == source));
return user != null ? user.ToUser() : null;
}
public User? GetAffiliateUserByPhone(string phone)
{
var user = _dc.Users.AsQueryable().FirstOrDefault(x => x.Phone == phone && x.Type == UserType.Affiliate);
@ -282,14 +306,16 @@ public partial class MongoRepository
}
else if (!string.IsNullOrWhiteSpace(filter.Email))
{
var curUser = _dc.Users.AsQueryable().FirstOrDefault(x => x.Source == source && x.Email == filter.Email.ToString());
var curUser = _dc.Users.AsQueryable().FirstOrDefault(x => x.Source == source && x.Email == filter.Email.ToLower());
User user = curUser != null ? curUser.ToUser() : null;
if (user != null)
{
searchResult.Add(user);
}
}
else if (!string.IsNullOrWhiteSpace(filter.UserName))
if (searchResult.Count == 0 && !string.IsNullOrWhiteSpace(filter.UserName))
{
var curUser = _dc.Users.AsQueryable().FirstOrDefault(x => x.Source == source && x.UserName == filter.UserName);
User user = curUser != null ? curUser.ToUser() : null;