using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.SignalR; using Newtonsoft.Json; using Photon.Core.Redis; 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; private readonly IUnitUserAttrService _attrService; public LoginController(IGameAccountService accountService, IAreaService areaService, IUnitUserService userService, IUnitUserAttrService attrService) { _accountService = accountService; _areaService = areaService; _userService = userService; _attrService = attrService; } [HttpGet] public string GetExp() { string html = string.Empty; decimal sum = 0M; decimal addsum = 0; for (int i = 1; i < 121; i++) { Decimal exp = GameTool.GetUserUpExp(i); if (i > 160 && i < 221) { addsum += exp; } sum += exp; html += string.Format("当前等级:{0},升级经验:{1};总经验:{2}\n\r", i, exp, sum); } html += String.Format("总经验:{0}", sum); html += String.Format("升级经验:{0}", addsum); return html; } /// /// 登录接口 /// /// /// // [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); //记录在线时间 await _attrService.UpdateOnLineTime(userInfo.userId, "Default", TokenConfig.TokenTime); return PoAction.Ok(new { token = token, refToken = userInfo.token, userId = userInfo.userId }); } [HttpPost] public async Task RefreshTokenByBook([FromBody] RefreshTokenParms parms) { if (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(); var userInfo = await _userService.GetUserInfoByToken(parms.refToken); 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 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 == null) { return PoAction.Message("角色不存在!"); } if (userInfo.regOk == 1) { return PoAction.Ok(true); } var areaInfo = await _areaService.GetAreaInfo((int)userInfo.areaId); if (areaInfo.isNeedCode == 1) //需要激活码 { if (string.IsNullOrEmpty(parms.code)) { return PoAction.Message("请输入激活码!"); } var ackInfo = await _areaService.GetAckInfo(parms.code); if (ackInfo == null) { return PoAction.Message("激活码过期!"); } if (ackInfo.status != 0) { return PoAction.Message("激活码过期!"); } if (ackInfo.areaId != 0 && ackInfo.areaId != areaInfo.areaId) { return PoAction.Message($"当前激活码可用于{ackInfo.areaId}区激活!"); } } if (await _userService.CheckUserNickIsAt(parms.nick)) { return PoAction.Message("昵称已存在!"); } if (await _userService.RegisterUserInfo(userId, parms.nick, sex)) { if (areaInfo.isNeedCode == 1) { await _areaService.UseAck(parms.code, userId); } return PoAction.Ok(true); } else { return PoAction.Message("注册失败,请稍后尝试!"); } } } }