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("未登录账号!"); } var areaInfo = await _areaService.GetAreaInfo(area); if (areaInfo == null) { return PoAction.Message("区服不存在!"); } if (areaInfo.status != 1) { 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); 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, 300); return PoAction.Ok(new { token = token, refToken = userInfo.token, userId = userInfo.userId }); } } }