当前位置: 首页 > news >正文

CoreShop微信小程序商城框架开启多租户-添加一个WPF客户端以便进行本地操作(5)

上一篇文件,我们写了客户端的一些界面设计,和post访问封装。今天我们进行用户登录功能的完善和测试。

1。 查看原来html登录都发送了什么代码

运行原来coreshop 按F12 进入调试模式,看看原来的登录都post 了什么数据。
在这里插入图片描述
由登录进行页面跳转,默认清空记录,需要选中Preserve Log
在这里插入图片描述
通过调试可以看到,Pos了两个数据{username: “XXXXX”, password: “XXXXXXXX”}

根据上次写的CoreHelper类似写登录代码,登录代码如下

        var username = txtUseName.Text.Trim();var password = txtPassword.Password;string url = txtWebhost.Text.Trim();if (string.IsNullOrEmpty(url)){System.Windows.MessageBox.Show("请输入网址", "提示", MessageBoxButton.OK, MessageBoxImage.Warning);return;}Settings.ApiUrl = url; // 设置全局API URL// 创建数据字典Dictionary<string, string> data = new Dictionary<string, string>
{{ "username", username },{ "password", password }
};string loginUrl =  "api/login/getJwtToken";var temp = await CoreHelper.PostAsync(loginUrl, data);

temp是登录之后的返回值 ,我们这里要做一些处理。输入正确的用户名和密码,看看返回的值是什么,运行结果截图如下:
在这里插入图片描述
如上图可以看到,已正确返回了数据。

2。完善登录代码

下一步模拟原来 CoreCms.Net.Web.Admin\wwwroot\views\user\login.html中登录之后操作,将token存盘,原来的处理代码如下:

 coreHelper.Post("api/login/getJwtToken", field, function (res) {if (res.code === 0) {//jwttoekn处理layui.data(setter.tableName, { key: setter.request.tokenName, value: 'Bearer ' + res.data.token.token });var curTime = new Date();var expiredate = new Date(curTime.setSeconds(curTime.getSeconds() + res.data.token.expires_in)); // 定义过期时间console.log(expiredate);console.log('登录:' + layui.data(setter.tableName)[setter.request.tokenName]);layer.msg('登入成功,跳转中...', { time: 2000 },function () {location.hash = search.redirect ? decodeURIComponent(search.redirect) : '/';location.reload();});} else {layer.msg(res.msg, { time: 1500 });}});

上面的代码使用的layui2.9开发框架,返回的的content内容为json格式建分析代码如下:

using Newtonsoft.Json;
using System;
using System.Collections.Generic;public class TokenData
{public bool success { get; set; }public string token { get; set; }public double expires_in { get; set; }public string token_type { get; set; }
}public class Data
{public TokenData token { get; set; }public string loginUrl { get; set; }
}public class RootObjectLogin
{public int code { get; set; }public string msg { get; set; }public Data data { get; set; }public object otherData { get; set; }public int count { get; set; }
}public static class AnalysisLoginData{public static RootObjectLogin Analysis(string content){     RootObjectLogin result = JsonConvert.DeserializeObject<RootObjectLogin>(content);Console.WriteLine("Code: " + result.code);Console.WriteLine("Message: " + result.msg);Console.WriteLine("Token: " + result.data.token.token);Console.WriteLine("Expires In (seconds): " + result.data.token.expires_in);Console.WriteLine("Login URL: " + result.data.loginUrl);return result;}
}

调用方式为:

  string loginUrl =  "api/login/getJwtToken";var response = await CoreHelper.PostAsync(loginUrl, data);  if (response.Code == HttpStatusCode.OK){string Content = response.Content;var result = AnalysisLoginData.Analysis(Content);}

在资源管理器加上字符串资源Authorization
在这里插入图片描述

完整 的登录函数如下:

    private async Task PerformLogin(){var username = txtUseName.Text.Trim();var password = txtPassword.Password;string url = txtWebhost.Text.Trim();if (string.IsNullOrEmpty(url)){System.Windows.MessageBox.Show("请输入网址", "提示", MessageBoxButton.OK, MessageBoxImage.Warning);return;}Settings.ApiUrl = url; // 设置全局API URL// 创建数据字典Dictionary<string, string> data = new Dictionary<string, string>
{{ "username", username },{ "password", password }
};string loginUrl =  "api/login/getJwtToken";var response = await CoreHelper.PostAsync(loginUrl, data);            if (response.Code == HttpStatusCode.OK){             string Content = response.Content;             var result = AnalysisLoginData.Analysis(Content);Properties.Settings.Default[Settings.TokenName] = "Bearer " + result.data.token;//过期时间Properties.Settings.Default["TokenExpire"] =DateTime.Now.AddSeconds(result.data.token.expires_in);          }}
http://www.lryc.cn/news/627157.html

相关文章:

  • 当 AI 开始 “理解” 情绪:情感计算如何重塑人机交互的边界
  • 基于单片机环境火灾安全检测
  • NVIDIA Isaac Sim
  • 48 C++ STL模板库17-容器9-关联容器-映射(map)多重映射(multimap)
  • VR交通安全学习机-VR交通普法体验馆方案
  • 2026 济南淀粉深加工展览会亮点:玉米科技与未来产业发展
  • IPSEC安全基础
  • C++智能指针详解:告别内存泄漏,拥抱安全高效
  • 【科研绘图系列】R语言绘制平滑曲线折线图
  • AI重塑软件测试:质量保障的下一站
  • MySQL分库分表与MyCAT
  • PiscCode集成Hand Landmarker:实现高精度手部姿态检测与分析
  • C语言:第18天笔记
  • Google Chrome扩展不受信任 - 不受支持的清单版本 解决方案 -- Chrome扩展插件无法加载 扩展程序无法使用 解决方案
  • PiscCode使用MediaPipe Face Landmarker实现实时人脸特征点检测
  • vue3 el-select 默认选中第一个
  • 基础笔记8.20
  • 8.20网络编程——sqlite3数据库
  • lua入门以及在Redis中的应用
  • 技术干货|使用Prometheus+Grafana监控redis实例详解
  • 自学嵌入式第二十三天:数据结构(3)-双链表
  • Java 性能优化实战(二):JVM 调优的 5 个核心维度
  • c#入门笔记(3)
  • Netty HashedWheelTimer设计原理:从时间轮算法到源码实现
  • 基于SpringBoot的蜗牛兼职网平台
  • RabbitMQ 基础
  • 使用安卓平板,通过USB数据线(而不是Wi-Fi)来控制电脑(版本1)
  • 豆秒数科集团:汽车消费金融市场的领跑者
  • 《P1967 [NOIP 2013 提高组] 货车运输》
  • 层在init中只为创建线性层,forward的对线性层中间加非线性运算。且分层定义是为了把原本一长个代码的初始化和运算放到一个组合中。