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); }}