当前位置: 首页 > 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.dtcms.com/a/341358.html

相关文章:

  • 读《精益数据分析》:规模化(Scale)—— 复制成功,进军新市场
  • VMware Workstation | 安装Ubuntu18.04.5
  • 波纹干涩 shader
  • 零知开源——基于STM32F103RBT6与ADXL362三轴加速度计的体感迷宫游戏设计与实现
  • 【Unity3D优化】平衡 Hide 与 Destroy:基于性能等级与 LRU 的 UI 管理策略与实践思考
  • PostgreSQL Certified Master 专访 | 第四期 贾桂军
  • 【Techlog】01入门-井筒数据整合软件的基本认识
  • 控制器调用服务层出现Cannot invoke ... 显示服务层bean对象为null
  • PostgreSQL 流程---更新
  • 编程语言学习
  • 环境搭建:centos7+docker+Oracle
  • 【datawhale组队学习】RAG技术 - TASK02
  • 3dmax 材质 / AO 通道渲染全流程
  • 3D检测笔记:相机模型与坐标变换
  • 超大型公共场所的智慧守护者——人脸动态识别与管理系统
  • 手机截图如何优雅地放在word里
  • 从原理到应用:GPS 定位技术的核心机制与未来发展
  • 心路历程-了解网络相关知识
  • 耐达讯自动化Profibus转光纤技术如何让称重传感器“零误差“运转?
  • 初始推荐系统
  • sed 命令的使用
  • Linux软件编程:总结
  • C++26反射机制:一场语言范式的革命
  • GEO公司推荐TOP5榜单:解析其数据架构与安全保障体系
  • C++智能指针详解:告别内存泄漏,拥抱安全高效
  • 如何用Python打造PubMed API客户端:科研文献检索自动化实践
  • Nginx 的完整配置文件结构、配置语法以及模块详解
  • 鸿蒙语音播放模块设置为独立线程,保证播放流畅
  • 【clion】visual studio的sln转cmakelist并使用clion构建32位
  • HTML5 视频与音频完全指南:从基础的 <video> / <audio> 标签到现代 Web 媒体应用