using ClockSnowFlake;
using dy.net.model.dto;
using dy.net.service;
using dy.net.utils;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.IdentityModel.Tokens;
using System.IdentityModel.Tokens.Jwt;
using System.Security.Claims;
using System.Text;
namespace dy.net.Controllers
{
[Route("api/[controller]/[action]")]
[ApiController]
public class AuthController : ControllerBase
{
private readonly IWebHostEnvironment webHostEnvironment;
private readonly AdminUserService _userService;
public AuthController(AdminUserService userService, IWebHostEnvironment webHostEnvironment)
{
_userService = userService;
this.webHostEnvironment = webHostEnvironment;
}
///
/// 修改密码
///
///
///
[Authorize]
[HttpPost]
public async Task UpdatePwd(UpdatePwdRequest user)
{
var (code, erro) = await _userService.UpdatePwd(user);
return ApiResult.Success("", erro);
}
///
/// 获取头像
///
///
[HttpGet]
public async Task GetUserAvatar()
{
var user = await _userService.GetUser();
return ApiResult.Success(new { user?.Avatar, user?.Id, user?.UserName });
}
///
/// 登录获取token
///
///
///
[HttpPost]
public async Task Login(LoginRequest loginUserInfo)
{
if (loginUserInfo == null)
{
return ApiResult.Fail("参数不能为空");
}
else
{
var user = await _userService.GetUser(loginUserInfo.UserName);
if (user == null)
{
return ApiResult.Fail("用户名或密码不正确");
}
else
{
if (user.Password == Md5Util.Md5(loginUserInfo.Password))
{
var tokenString = GenerateJwtToken(user.UserName);
return Ok(new { code = 0, erro = "", token = tokenString, expires = 24 * 60 * 60 * 1000, data = user.UserName });
}
else
{
return ApiResult.Fail("用户名或密码不正确");
}
}
}
}
private static string GenerateJwtToken(string username)
{
var claims = new[]
{
new Claim(ClaimTypes.Name, username),
new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString())
};
var k = Md5Util.JWT_TOKEN_KEY;
var key = new SymmetricSecurityKey(Encoding.ASCII.GetBytes(k));
var credentials = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);
var expires = DateTime.Now.AddDays(7);
var token = new JwtSecurityToken(
issuer: IdGener.GetLong().ToString(),
audience: IdGener.GetLong().ToString(),
claims: claims,
expires: expires,
signingCredentials: credentials
);
var jwtToken = new JwtSecurityTokenHandler().WriteToken(token);
return jwtToken;
}
}
}