You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
132 lines
3.6 KiB
132 lines
3.6 KiB
using JWT.Algorithms;
|
|
using JWT.Builder;
|
|
using JWT.Exceptions;
|
|
using learun.util;
|
|
using System;
|
|
|
|
namespace learun.operat
|
|
{
|
|
/// <summary>
|
|
/// 版 本 EasyCode EC管理后台
|
|
/// Copyright (c) 2019-present EC管理有限公司
|
|
/// 创建人:tobin
|
|
/// 日 期:2019.09.12
|
|
/// 描 述:当前连接用户信息处理类
|
|
/// </summary>
|
|
public class Operator : IOperator
|
|
{
|
|
//private readonly ICache _cache;
|
|
//public Operator(ICache cache) {
|
|
// _cache = cache;
|
|
//}
|
|
///// <summary>
|
|
///// 判断是否登录
|
|
///// </summary>
|
|
///// <param name="account">账号</param>
|
|
///// <param name="token">token</param>
|
|
///// <returns></returns>
|
|
//public async Task<bool> IsOnLine(string account,string token)
|
|
//{
|
|
// try
|
|
// {
|
|
// string accountTmp = await _cache.ReadAsync<string>(token);
|
|
|
|
// if (account == accountTmp)
|
|
// {
|
|
// return true;
|
|
// }
|
|
// else {
|
|
// return false;
|
|
// }
|
|
// }
|
|
// catch (Exception)
|
|
// {
|
|
// return false;
|
|
// }
|
|
//}
|
|
///// <summary>
|
|
///// 添加登录者(保存一天时间)
|
|
///// </summary>
|
|
///// <param name="account">账号</param>
|
|
///// <returns></returns>
|
|
//public async Task<string> AddLoginUser(string account) {
|
|
// string token = Guid.NewGuid().ToString();
|
|
// TimeSpan ts = new TimeSpan(1, 0, 0, 0);
|
|
// var list = await _cache.ReadAsync<List<string>>(account);
|
|
// if (list == null) {
|
|
// list = new List<string>();
|
|
// }
|
|
// list.Add(token);
|
|
// await _cache.WriteAsync(account, list, ts);
|
|
// await _cache.WriteAsync(token, account, ts);
|
|
// return token;
|
|
//}
|
|
|
|
///// <summary>
|
|
///// 清除登录者信息
|
|
///// </summary>
|
|
///// <param name="account">登录者用户账号</param>
|
|
///// <returns></returns>
|
|
//public async Task ClearLoginUser(string account)
|
|
//{
|
|
// var list = await _cache.ReadAsync<List<string>>(account);
|
|
// if (list != null)
|
|
// {
|
|
// foreach (var token in list)
|
|
// {
|
|
// await _cache.RemoveAsync(token);
|
|
// }
|
|
// await _cache.RemoveAsync(account);
|
|
// }
|
|
//}
|
|
|
|
/// <summary>
|
|
/// 生成jwt令牌
|
|
/// </summary>
|
|
/// <param name="userId">用户id</param>
|
|
/// <param name="userName">用户名称</param>
|
|
/// <param name="account">用户账号</param>
|
|
/// <returns></returns>
|
|
public string EncodeToken(string userId, string userName, string account)
|
|
{
|
|
var token = new JwtBuilder()
|
|
.WithAlgorithm(new HMACSHA256Algorithm())
|
|
.WithSecret(ConfigHelper.GetConfig().JwtSecret)
|
|
.AddClaim("iat", DateTimeOffset.UtcNow.ToUnixTimeSeconds())
|
|
.AddClaim("exp", DateTimeOffset.UtcNow.AddHours(12).ToUnixTimeSeconds()) // 设置12小时过期
|
|
.AddClaim("UserId", userId).AddClaim("UserName", userName).AddClaim("Account", account)
|
|
.Encode();
|
|
|
|
return token;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 解密jwt令牌
|
|
/// </summary>
|
|
/// <param name="token">令牌</param>
|
|
/// <returns>TokenExpiredException 时间过期,SignatureVerificationException 签证不正确</returns>
|
|
public string DecodeToken(string token)
|
|
{
|
|
try
|
|
{
|
|
var json = new JwtBuilder()
|
|
.WithAlgorithm(new HMACSHA256Algorithm())
|
|
.WithSecret(ConfigHelper.GetConfig().JwtSecret)
|
|
.MustVerifySignature()
|
|
.Decode(token);
|
|
return json;
|
|
//Console.WriteLine(json);
|
|
}
|
|
catch (TokenExpiredException)
|
|
{
|
|
return "TokenExpiredException";
|
|
//Console.WriteLine("Token has expired");
|
|
}
|
|
catch (SignatureVerificationException)
|
|
{
|
|
return "SignatureVerificationException";
|
|
//Console.WriteLine("Token has invalid signature");
|
|
}
|
|
}
|
|
}
|
|
}
|