diff --git a/WGShare.API/Controllers/AuthController.cs b/WGShare.API/Controllers/AuthController.cs index cd9353b..61c9414 100644 --- a/WGShare.API/Controllers/AuthController.cs +++ b/WGShare.API/Controllers/AuthController.cs @@ -12,6 +12,7 @@ using WGShare.API.Hubs; using WGShare.Domain.Constant; using WGShare.Domain.DTOs.Login; using WGShare.Domain.Entities; +using WGShare.Domain.Enums; using WGShare.Domain.FriendlyException; using WGShare.Domain.FriendlyException.Exceptions; @@ -47,7 +48,7 @@ namespace WGShare.API.Controllers [HttpGet("check-user"), AllowAnonymous] public async Task CheckUser([FromQuery] string account) { - return await _sqlSugar.Queryable().AnyAsync(x => x.IsDelete == false && x.Account == account); + return await _sqlSugar.Queryable().AnyAsync(x => x.IsDelete == false && x.Account == account && x.IsAnonymous == false); } /// @@ -58,7 +59,7 @@ namespace WGShare.API.Controllers public async Task Login([FromBody] UserLoginDTO loginDTO) { var user = await _sqlSugar.Queryable() - .FirstAsync(x => x.Account == loginDTO.Account && x.IsDelete == false && x.Pwd == loginDTO.Pwd); + .FirstAsync(x => x.Account == loginDTO.Account && x.IsDelete == false && x.Pwd == loginDTO.Pwd && x.IsAnonymous == false); if (user == null) { throw Oops.Oh("用户名或密码不正确!"); @@ -123,7 +124,7 @@ namespace WGShare.API.Controllers if (!string.IsNullOrWhiteSpace(roomNum)) { await _hubContext.Clients.Group(roomNum).UserLeave(user.Id); - } + } await _hubContext.Clients.Client(connectId).ForceLogout("账号已在其他地方登录,您被迫下线!"); } @@ -194,7 +195,7 @@ namespace WGShare.API.Controllers }); } - + /// /// 登出(暂未处理任何业务逻辑) /// @@ -205,6 +206,68 @@ namespace WGShare.API.Controllers return true; } + /// + /// 匿名登录 + /// + /// + /// + [HttpPost("anon-login"), AllowAnonymous] + public async Task AnonymousLogin([FromBody] AnonymousUserLoginDTO loginDTO) + { + var room = await _sqlSugar.Queryable().Where(x => x.RoomNum == loginDTO.RoomNum && x.IsDelete == false).FirstAsync(); + if (room == null) + { + throw Oops.Oh("房间不存在!"); + } + + var user = await _sqlSugar.Queryable().Where(x => x.Account == loginDTO.DeviceId).FirstAsync(); + if (user == null) + { + // 用户不存在,创建 + user = new User + { + Account = loginDTO.DeviceId, + IsDelete = false, + IsAnonymous = true, + Pwd = "123456", + RoleId = "2", + UserName = loginDTO.NickName, + ScreenShareId = UserShareIdHelper.GenerateUnique8DigitNumber(), + TenantId = "123456", + }; + user.Id = (await _sqlSugar.Insertable(user).ExecuteReturnIdentityAsync()).ToString(); + } + else + { + if (user.IsDelete) + { + throw Oops.Oh("该设备已禁止登录!"); + } + } + + var btnAutn = new List(); + btnAutn.Add(new Claim("perm", "0")); + btnAutn.Add(new Claim("roleid", "2")); + btnAutn.Add(new Claim("tenant", room.TenantId)); + btnAutn.Add(new Claim("account", user.Account)); + btnAutn.Add(new Claim("uname", user.UserName)); + btnAutn.Add(new Claim("ssid", user.ScreenShareId)); + + var accessToken = _jwtHelper.CreateToken(user.Id, btnAutn); + return Ok(new + { + perms = "0", + token = accessToken, + refresh_token = "", + roleId = user.RoleId, + userName = user.UserName, + tenantName = "匿名用户区域", + expire = _configuration["Jwt:Expires"].ToInt32(), + account = user.Account, + uid = user.Id, + screenShareId = user.ScreenShareId + }); + } #region 后台管理员登录接口 diff --git a/WGShare.API/Controllers/Frontend/UserController.cs b/WGShare.API/Controllers/Frontend/UserController.cs index 9f9e79c..acf3e7e 100644 --- a/WGShare.API/Controllers/Frontend/UserController.cs +++ b/WGShare.API/Controllers/Frontend/UserController.cs @@ -49,7 +49,7 @@ namespace WGShare.API.Controllers.Frontend var list = await _sqlSugar.Queryable() .InnerJoin((u, r) => u.RoleId == r.Id) - .Where((u, r) => u.IsDelete == false && u.TenantId == TenantId) + .Where((u, r) => u.IsDelete == false && u.TenantId == TenantId && u.IsAnonymous == false) .WhereIF(!string.IsNullOrWhiteSpace(searchKeywod), (u, r) => u.UserName.Contains(searchKeywod) || u.Account.Contains(searchKeywod)) .WhereIF(isOnline.HasValue && isOnline.Value == true, (u, r) => onlineUid.Contains(u.Id)) .WhereIF(isOnline.HasValue && isOnline.Value == false, (u, r) => !onlineUid.Contains(u.Id)) diff --git a/WGShare.API/WGShare.API.xml b/WGShare.API/WGShare.API.xml index c603585..6cbbd4f 100644 --- a/WGShare.API/WGShare.API.xml +++ b/WGShare.API/WGShare.API.xml @@ -30,6 +30,13 @@ + + + 匿名登录 + + + + 管理员登录 diff --git a/WGShare.Domain/DTOs/Login/AnonymousUserLoginDTO.cs b/WGShare.Domain/DTOs/Login/AnonymousUserLoginDTO.cs new file mode 100644 index 0000000..188534a --- /dev/null +++ b/WGShare.Domain/DTOs/Login/AnonymousUserLoginDTO.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace WGShare.Domain.DTOs.Login +{ + /// + /// 匿名用户登录 + /// + public class AnonymousUserLoginDTO + { + public string DeviceId { get; set; } + + public string NickName { get; set; } + + public string RoomNum { get; set; } + } +} diff --git a/WGShare.Domain/Entities/User.cs b/WGShare.Domain/Entities/User.cs index ef25a98..6baff77 100644 --- a/WGShare.Domain/Entities/User.cs +++ b/WGShare.Domain/Entities/User.cs @@ -59,6 +59,11 @@ namespace WGShare.Domain.Entities [SugarColumn(ColumnName = "tenant_id")] public string TenantId { get; set; } /// + /// 是否匿名登录用户 + /// + [SugarColumn(ColumnName = "is_anonymous")] + public bool IsAnonymous { get; set; } + /// /// 共享屏幕Id /// [SugarColumn(ColumnName = "screen_share_id", IsOnlyIgnoreUpdate = true)]