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 });
}
}
}