public async Task <OperateResult> LoginToSystem <T>(T loginIno, CancellationToken cancellationToken = default) { var loginModel = loginIno as XiaoMiLoginModel; if (loginModel == null) { return(OperateResult.Failed(null, string.Empty, "当前登录信息转换失败")); } var existUser = await _userRepo.FindByUserKeyInfoAsync(loginModel.UserPhone, StepFlyProviderType.XiaoMi); OperateResult operateResult = await Login(loginModel, existUser, cancellationToken); if (!operateResult.Succeeded) { return(operateResult); } var result = operateResult.Information.PlayLoad !as XiaoMiLoginAPISuccessModel ?? throw new SoftlyMiCakeException($"转换{nameof(XiaoMiLoginAPISuccessModel)}返回结果出错"); //保存当前用户的信息 if (!result.AlreadyHasUser) { var user = StepFlyUser.Create(loginModel.UserPhone, loginModel.Password, result.UserId); user.SetProvider(StepFlyProviderType.XiaoMi); user.SetToken(result.Token, DateTime.Now.AddDays(invalidHours)); user.SetClientInfo(null, result.DeviceId); user.SetAdditionalInfo(result.LoginToken); await _userRepo.AddAsync(user); result.User = user; } else { existUser.SetToken(result.Token, DateTime.Now.AddDays(invalidHours)); existUser.SetAdditionalInfo(result.LoginToken); existUser.SetPassword(loginModel.Password); //保证设备ID不为空 existUser.SetClientInfo(existUser.UserClientInfo, existUser.DeviceId); result.User = existUser; } return(OperateResult.Success(HttpStatusCode.OK.ToString(), "登录成功", result)); }
public async Task <OperateResult> LoginToSystem <T>(T loginIno, CancellationToken cancellationToken = default) { var loginModel = loginIno as LeXinLoginModel; if (loginModel == null) { return(OperateResult.Failed(null, string.Empty, "当前登录信息转换失败")); } var existUser = await _userRepo.FindByUserKeyInfoAsync(loginModel.UserKeyInfo); OperateResult operateResult = null; if (loginModel.Type == LeXinLoginType.AuthCode) { operateResult = await LoginWithAuthCode(loginModel.AuthCodeLoginInfo, existUser, cancellationToken); } else if (loginModel.Type == LeXinLoginType.Password) { operateResult = await LoginWithPassword(loginModel.PasswordLoginInfo, existUser, cancellationToken); } if (operateResult != null) { if (!operateResult.Succeeded) { return(operateResult); } var result = operateResult.Information.PlayLoad !as LeXinLoginAPISuccessModel ?? throw new SoftlyMiCakeException($"转换{nameof(LeXinLoginAPISuccessModel)}返回结果出错"); var userLoginInfo = JsonSerializer.Deserialize <LeXinUserLoginSuccessModel>(result.APIResponseData, new JsonSerializerOptions() { PropertyNameCaseInsensitive = true }); //保存当前用户的信息 if (!result.AlreadyHasUser) { var user = StepFlyUser.Create(loginModel.UserKeyInfo, loginModel.PasswordLoginInfo?.Password ?? "", userLoginInfo.UserId); user.SetToken(result.Cookie, DateTimeHelper.ConvertStampToDateTime(userLoginInfo.ExpireAt, TimeStampType.ThirteenLength)); user.SetClientInfo(result.ClientInfo, null); await _userRepo.AddAsync(user); result.User = user; } else { existUser.SetToken(result.Cookie, DateTimeHelper.ConvertStampToDateTime(userLoginInfo.ExpireAt, TimeStampType.ThirteenLength)); existUser.SetPassword(loginModel.PasswordLoginInfo?.Password); //保证设备ID不为空 existUser.SetClientInfo(existUser.UserClientInfo, existUser.DeviceId); result.User = existUser; } return(OperateResult.Success(HttpStatusCode.OK.ToString(), "登录成功", result)); } else { return(OperateResult.Failed(null, "E0", "未找到对应的登录方式")); } }