using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.SignalR; using Newtonsoft.Json; namespace Application.Web.Controllers.Login { /// /// 登录接口 /// [ApiExplorerSettings(GroupName = "Login")] [Route("[controller]/[action]")] [ApiController] public class LoginController : ControllerBase { private readonly IGameAccountService _accountService; private readonly IAreaService _areaService; private readonly IUnitUserService _userService; public LoginController(IGameAccountService accountService, IAreaService areaService, IUnitUserService userService) { _accountService = accountService; _areaService = areaService; _userService = userService; } /// /// 登录接口 /// /// /// [HttpPost] public async Task Login([FromBody] LoginParms parms) { return PoAction.Ok(parms.code); } /// /// 探玩自动登录 /// /// /// [HttpGet] public async Task TwLogin(string code) { if (string.IsNullOrEmpty(code)) { return PoAction.Message("code值错误!"); } AutoLogin login = new AutoLogin(); var loginInfo = await login.TwLogin(code); if (loginInfo.code == 0) { dynamic twInfo = JsonConvert.DeserializeObject(loginInfo.data.ToString()); string openId = twInfo.openid; string nick = "探玩玩家"; var accInfo = await _accountService.GetAccInfoByOpenId(openId); if (accInfo == null) { var userData = await _accountService.Regist("", nick, "", "", openId); if (userData == null) { return PoAction.Message("登录失败,请联系客服!"); } else { object ret = new { token = userData.token }; return PoAction.Ok(ret); } } else { if (accInfo.status != 1) { return PoAction.Message("账号被冻结!"); } else { object ret = new { token = accInfo.token }; return PoAction.Ok(ret); } } } else { return PoAction.Message(loginInfo.msg); } } /// /// 退出登录 /// /// /// [HttpGet] public async Task LoginOut(string? sid) { if (string.IsNullOrEmpty(sid)) { return PoAction.Message("身份信息不存在!"); } var accInfo = await _accountService.GetAccInfoByToken(sid); if (accInfo == null) { return PoAction.Message("身份信息不存在!"); } if (await _accountService.UpdateAccountToken(accInfo.accId)) { return PoAction.Ok(true); } else { return PoAction.Message("退出失败,请稍后尝试!"); } } /// /// 注册基础账号信息 /// /// /// /// [HttpGet] public async Task Register(string sid, int area) { if (string.IsNullOrEmpty(sid)) { return PoAction.Message("未登录账号!"); } var accInfo = await _accountService.GetAccInfoByToken(sid); if (accInfo == null) { return PoAction.Message("未登录账号!"); } if (accInfo.status != 1) { return PoAction.Message("账号已冻结!"); } var areaInfo = await _areaService.GetAreaInfo(area); if (areaInfo == null) { return PoAction.Message("区服不存在!"); } if (areaInfo.status != 1) { return PoAction.Message("当前区繁忙,无法进入!"); } if (areaInfo.opTime > DateTime.Now) { return PoAction.Message("暂未开放本区服!"); } //判断是否已经注册 var userData = await _userService.GetUserDataByAccId(accInfo.accId); if (userData.Any(it => it.areaId == area)) { return PoAction.Message("该区已存在角色!"); } var userInfo = await _userService.Register(areaInfo.areaId, accInfo.accId); if (userInfo == null) { return PoAction.Message("注册失败,请稍后尝试!"); } Dictionary loadData = new Dictionary(); loadData.Add("userId", userInfo.userId); loadData.Add("accId", userInfo.accId); loadData.Add("areaId", userInfo.areaId); string Key = App.Configuration["JwtTokenOptions:SecurityKey"].ToString(); string Issuer = App.Configuration["JwtTokenOptions:Issuer"].ToString(); string Audience = App.Configuration["JwtTokenOptions:Audience"].ToString(); string token = JwtHelper.CreateToken(Key, Issuer, Audience, loadData, TokenConfig.TokenTime); return PoAction.Ok(new { token = token, refToken = userInfo.token, userId = userInfo.userId }); } /// /// 登录到游戏 /// /// /// /// [HttpGet] public async Task LoginGame(string sid, string user) { if (string.IsNullOrEmpty(sid)) { return PoAction.Message("未登录账号!"); } var accInfo = await _accountService.GetAccInfoByToken(sid); if (accInfo == null) { return PoAction.Message("未登录账号!"); } if (accInfo.status != 1) { return PoAction.Message("账号已冻结!"); } var userInfo = await _userService.GetUserInfoByUserId(user); if (userInfo == null) { return PoAction.Message("角色不存在!"); } if (userInfo.accId != accInfo.accId) { return PoAction.Message("角色不存在!"); } if (userInfo.status == 0) { return PoAction.Message("角色已封禁!"); } Dictionary loadData = new Dictionary(); loadData.Add("userId", userInfo.userId); loadData.Add("accId", userInfo.accId); loadData.Add("areaId", userInfo.areaId); string Key = App.Configuration["JwtTokenOptions:SecurityKey"].ToString(); string Issuer = App.Configuration["JwtTokenOptions:Issuer"].ToString(); string Audience = App.Configuration["JwtTokenOptions:Audience"].ToString(); string token = JwtHelper.CreateToken(Key, Issuer, Audience, loadData, TokenConfig.TokenTime); return PoAction.Ok(new { regOk = userInfo.regOk, token = token, refToken = userInfo.token, userId = userInfo.userId }); } [HttpPost] public async Task RefreshToken([FromBody] RefreshTokenParms parms) { if (string.IsNullOrEmpty(parms.token) || string.IsNullOrEmpty(parms.refToken)) { return PoAction.Message("刷新失败"); } string Key = App.Configuration["JwtTokenOptions:SecurityKey"].ToString(); string Issuer = App.Configuration["JwtTokenOptions:Issuer"].ToString(); string Audience = App.Configuration["JwtTokenOptions:Audience"].ToString(); string accId = string.Empty; var tokenData = await JwtTool.GetJwtData(parms.token, Key, "accId"); if (tokenData != null) { accId = tokenData.ToString(); } var userInfo = await _userService.GetUserInfoByToken(parms.refToken); if (userInfo == null) { return PoAction.Message("刷新失败,用户不存在!"); } if (userInfo.accId != accId) { return PoAction.Message("刷新失败,数据信息不合法!"); } Dictionary loadData = new Dictionary(); loadData.Add("userId", userInfo.userId); loadData.Add("accId", userInfo.accId); loadData.Add("areaId", userInfo.areaId); string token = JwtHelper.CreateToken(Key, Issuer, Audience, loadData, TokenConfig.TokenTime); return PoAction.Ok(new { token = token, refToken = userInfo.token, userId = userInfo.userId }); } /// /// 注册角色信息 /// /// /// [HttpPost] [Authorize] public async Task RegisterInfo([FromBody] RegisterInfoParms parms) { if (string.IsNullOrEmpty(parms.nick)) { return PoAction.Message("昵称不能为空!"); } if (!RegExpAssist.RegStringLeght(parms.nick, 1, 12)) { return PoAction.Message("昵称需要1-12字符之间哦!"); } string sex = parms.sex == 0 ? "女" : "男"; string userId = StateHelper.userId; var userInfo = await _userService.GetUserInfoByUserId(userId); if (userInfo.regOk == 1) { return PoAction.Ok(true); } if (await _userService.RegisterUserInfo(userId, parms.nick, sex)) { return PoAction.Ok(true); } else { return PoAction.Message("注册失败,请稍后尝试!"); } } } }