using FlexJobApi.Core; using Furion.DatabaseAccessor; using Furion.DataEncryption; using Furion.FriendlyException; using Mapster; using MediatR; using Microsoft.EntityFrameworkCore; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace FlexJobApi.User.Application { /// /// 密码登录 /// public class PasswordLoginCommandHandler( IRepository userAuthRep, IRepository userInfoRep) : IRequestHandler { private readonly IRepository userAuthRep = userAuthRep; private readonly IRepository userInfoRep = userInfoRep; /// public async Task Handle(PasswordLoginCommand request, CancellationToken cancellationToken) { var userInfo = await userInfoRep.AsQueryable().AsNoTracking() .Include(it => it.UserAuth) .Where(it => it.UserAuth.UserName == request.UserName && it.Type == request.Type) .Select(it => new { it.Id, it.UserAuth.Avatar, it.UserAuth.Name, it.UserAuth.UserName, it.UserAuth.PhoneNumber, it.UserAuth.Password }) .FirstOrDefaultAsync(cancellationToken); if (userInfo == null || !PBKDF2Encryption.Compare(request.Password, userInfo.Password)) throw Oops.Oh(EnumUserErrorCodeType.u1000); var logier = new CurrentLogier { UserInfoId = userInfo.Id, Avatar = userInfo.Avatar, Name = userInfo.Name, UserName = userInfo.UserName, PhoneNumber = userInfo.PhoneNumber, }; JwtUtils.GenerateToken(logier); return new PasswordLoginCommandCallback { AccessToken = logier.AccessToken, RefreshToken = logier.RefreshToken, }; } } }