using Furion.DataEncryption;
using Furion.DynamicApiController;
using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Authentication.Cookies;
using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Nirvana.Common;
using Nirvana.Common.ApiBase;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Claims;
using System.Text;
using System.Threading.Tasks;
using YBDevice.Application.CommonInfo;
using YBDevice.Entity;
namespace YBDevice.Application.AccountInfo
{
///
/// 账户管理接口
///
[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]
public class AccountAppService : IDynamicApiController
{
private readonly IAccountService _accountService;
private readonly IHttpContextAccessor _httpContextAccessor;
public AccountAppService(IAccountService accountService, IHttpContextAccessor httpContextAccessor)
{
_accountService = accountService;
_httpContextAccessor = httpContextAccessor;
}
///
/// 账户登录
///
///
///
[HttpPost]
[AllowAnonymous]
public async Task LoginAsync(LoginModel model)
{
var result= await _accountService.LoginAsync(model);
if (result.code == ResultState.SUCCESS)
{
var data = result.data as LoginInfoDto;
//设置响应报文头
_httpContextAccessor.HttpContext.Response.Headers["access-token"] = data.Token;
_httpContextAccessor.HttpContext.Response.Headers["x-access-token"] = data.RefreshToken;
var claims = JWTEncryption.ReadJwtToken(data.Token)?.Claims;
// 创建身份信息
var claimIdentity = new ClaimsIdentity("AuthenticationTypes.Federation");
claimIdentity.AddClaims(claims);
var claimsPrincipal = new ClaimsPrincipal(claimIdentity);
// 设置 HttpContext.User 并登录
_httpContextAccessor.HttpContext.User = claimsPrincipal;
await _httpContextAccessor.HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, claimsPrincipal);
}
return result;
}
///
/// 修改密码
///
///
///
///
///
[HttpGet]
[QueryParameters]
public async Task ChangePwdAsync(string oldpwd, string newpwd, string repwd)
{
return await _accountService.ChangePwdAsync(oldpwd, newpwd, repwd);
}
///
/// 重置密码
///
/// 用户ID
/// 重置的密码
///
[HttpGet]
[QueryParameters]
public async Task RevicePasswordAsync(int id, string pwd)
{
return await _accountService.RevicePasswordAsync(id, pwd);
}
///
/// 越权登录
///
///
///
[HttpGet]
[QueryParameters]
public async Task UserEnterAsync(int id)
{
return await _accountService.UserEnterAsync(id);
}
///
/// 退出登录
///
///
[HttpGet]
public async Task OutLoginAsync()
{
await _httpContextAccessor.HttpContext.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme);
return new ResultInfo(ResultState.SUCCESS, "success");
}
}
}