Files
coreshoppro/CoreCms.Net.Utility/Helper/JwtTokenHelper.cs
大灰灰 7b68f352d7 ### 0.6.0 专业版(大版本升级,破坏性升级,请酌情处理):
【新增】弃用现在sku前端,启用全新sku组件,更加灵活,体验更好。
【新增】新增通过商品序列获取sku全新列表功能。
【新增】仓储层底层增加二级缓存功能,后面将逐步完善底层缓存中心模块。
【新增】0元购,积分兑换模式下,也去计算用户是否科技升级。
【新增】数据及业务仓储增加二级缓存功能。curd可自主控制是否缓存和清除。
【新增】订单导出excel数据增加商品名称+货品sku组合展示的方式。
【新增】自定义交易组件增加【获取商家信息】【更新商家信息】两个接口处理。
【新增】增加公告列表及公告详情页面,首页组件公告点击跳转列表展示。
【新增】个人中心增加【公告中心】入口。
【新增】后台余额变动增加说明录入。

【调整】将前端能进行分包的文件夹都进行分包,减少主包占用,方便进行二开。
【调整】因ckeditor5存在图片不可设置宽度,上传不支持mp4,排版不畅等情况,降级使用ckeditor4版本。
【修复】修复0.5.5版本售后积分返还机制积分模式判断异常的问题。
【修复】修复使用积分全额抵扣,或其他优惠政策导致的0元购,未进行短信提醒及小票打印机未打印的问题。
【修复】修复更换ckeditor4编辑器后接龙添加编辑调用失败的问题。
【修复】修复积分全额抵扣,金额0元购的情况下,进行售后执行完毕,订单未完结的情况。
【优化】去除分销申请面板按钮无用并失效报错的customStyle属性。
【优化】优化部分方法中使用手写字符串的遗留问题,统一采用enum方式。
【优化】优化前端及接口部分命名错误的问题。错将skill误写成seckill。
【优化】去除uniapp端多个客服代码。
【优化】商品详情底部完善购物车数量显示的问题。
【优化】优化团购列表,拼团列表,秒杀页面页面样式布局差异问题。
【优化】调整支付结果界面样式效果,仿微信支付结果界面。更加清晰明朗。
【优化】优化售后提交页面json计算,开放当用户下单后但未发货情况下,可以申请直接售后的操作需求。
【优化】后台商家手机号码支持设置多个,使用小写逗号分隔,方便多个商家管理员接收下单提醒。
【优化】后台售后单审核,调整售后商品为必选项。
2022-09-14 00:53:04 +08:00

120 lines
4.0 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System;
using System.Collections.Generic;
using System.IdentityModel.Tokens.Jwt;
using System.Linq;
using System.Security.Claims;
using System.Text;
using System.Threading.Tasks;
using CoreCms.Net.Model.Entities;
using CoreCms.Net.Utility.Extensions;
using Microsoft.IdentityModel.Tokens;
namespace CoreCms.Net.Utility.Helper
{
/// <summary>
/// Jwt帮助工具
/// </summary>
public static class JwtTokenHelper
{
/// <summary>
/// 创建Token暂不使用
/// </summary>
/// <returns></returns>
public static string CreateJwt(CoreCmsUser userInfo)
{
//创建声明Token数组
var claim = new List<Claim> {
new Claim(ClaimTypes.GivenName, userInfo.userName),
new Claim(ClaimTypes.Name, userInfo.nickName),
new Claim(JwtRegisteredClaimNames.Jti, userInfo.id.ToString()),
new Claim(ClaimTypes.Expiration, DateTime.Now.AddHours(1).ToString("yyyy-MM-dd HH:mm:ss")) };
var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("yanglingcong@qq.com"));//密钥大小要超过128bt最少要16位
//实例化一个token对象
//第一种方式
//var token = new JwtSecurityToken(claims: claim);
//第二种方式
var token = new JwtSecurityToken(
issuer: "kevin",//发起人:当前项目
audience: "kevin project",//订阅我们需要谁去使用这个Token
claims: claim,//声明的数组
expires: DateTime.Now.AddHours(1),//当前时间加一小时,一小时后过期
signingCredentials: new SigningCredentials(key, SecurityAlgorithms.HmacSha256)//数字签名 第一部分是密钥,第二部分是加密方式
);
//生成token
var jwtToken = new JwtSecurityTokenHandler().WriteToken(token);
return jwtToken;
}
/// <summary>
/// 解析token
/// </summary>
/// <param name="token"></param>
/// <returns></returns>
public static GetTokenModel AnalysisToken(string token)
{
//第一种直接用JwtSecurityTokenHandler提供的read方法
var jwtHander = new JwtSecurityTokenHandler();
JwtSecurityToken jwtSecurityToken = jwtHander.ReadJwtToken(token);
GetTokenModel tokenModel = new GetTokenModel();
var currentInfo = jwtSecurityToken.Claims;
if (currentInfo.Any())
{
tokenModel.UserName = currentInfo.FirstOrDefault(f => f.Type == ClaimTypes.MobilePhone)!.Value;
tokenModel.NickName = currentInfo.FirstOrDefault(f => f.Type == ClaimTypes.Name)!.Value;
tokenModel.UserId = currentInfo.FirstOrDefault(f => f.Type == ClaimTypes.NameIdentifier)!.Value.ObjectToInt(0);
tokenModel.Expired = currentInfo.FirstOrDefault(f => f.Type == ClaimTypes.Expired)!.Value.ObjectToInt(0);
var dt = DateTime.Now;
tokenModel.Expiration = currentInfo.FirstOrDefault(f => f.Type == ClaimTypes.Expiration)!.Value.ObjectToDate(dt);
if (dt > tokenModel.Expiration)
{
return null;
}
}
return tokenModel;
}
}
/// <summary>
/// 获取token信息
/// </summary>
public class GetTokenModel
{
/// <summary>
/// 用户
/// </summary>
public string UserName { get; set; }
/// <summary>
/// 用户昵称
/// </summary>
public string NickName { get; set; }
/// <summary>
/// 用户序列
/// </summary>
public int UserId { get; set; }
/// <summary>
/// 有效时间分钟
/// </summary>
public int Expired { get; set; }
/// <summary>
/// 有效时间
/// </summary>
public DateTime Expiration { get; set; }
}
}