using Binance.TradeRobot.Common.DI; using Binance.TradeRobot.Common.Extensions; using Binance.TradeRobot.Model.Base; using Binance.TradeRobot.Model.Db; using Binance.TradeRobot.Model.Dto; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.IdentityModel.Tokens; using System; using System.Collections.Generic; using System.IdentityModel.Tokens.Jwt; using System.Security.Claims; using System.Text; namespace Binance.TradeRobot.Business { [BatchRegistration(ServiceLifetime.Singleton, RegistrationType.Self)] public class UserBusiness : BaseBusiness { private IConfiguration configuration; public UserBusiness(IFreeSql fsql, NLogManager logManager, IConfiguration configuration) : base(fsql, logManager) { this.configuration = configuration; } public LoginResponse Login(LoginRequest loginRequest) { var pwd = loginRequest.Pwd.ToMD5(); var user = fsql.Select().Where(u => u.UserName == loginRequest.UserName && u.Pwd == pwd).ToOne(); if (user == null) throw new BusinessException("用户名或密码错误"); #region 签发token var claims = new List() { new Claim("Id",user.Id.ToString()), new Claim("UserName",user.UserName), }; var jwtSecret = configuration.GetSection("JwtConfig:Secret").Value; var jwtIssuer = configuration.GetSection("JwtConfig:Issuer").Value; var jwtAudience = configuration.GetSection("JwtConfig:Audience").Value; var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(jwtSecret)); var credentials = new SigningCredentials(key, SecurityAlgorithms.HmacSha256); var jwtToken = new JwtSecurityToken(jwtIssuer, jwtAudience, claims, expires: DateTime.Now.AddDays(30), signingCredentials: credentials); var token = new JwtSecurityTokenHandler().WriteToken(jwtToken); #endregion return new LoginResponse() { Id = user.Id, UserName = user.UserName, Token = token }; } } }