学习ASP.NET Core的身份认证(基于JwtBearer的身份认证6)
重新创建WebApi项目,安装Microsoft.AspNetCore.Authentication.JwtBearer包,将之前JwtBearer测试项目中的初始化函数,jwt配置类、token生成类全部挪到项目中。
重新编写login函数,之前测试Cookie和Session认证时用的函数适合mvc模式,WebApi项目下函数返回的是状态码及其它信息,直接将开源博客Blog项目中的ApiResult类照搬过来,如果登录成功则将token保存到Msg属性中返回客户端。login函数的主要代码如下(用户名及密码验证还是写死的,后续再调整成从数据库中查询):
public async Task<ApiResult> Login([FromBody]UserInfo info)
{if (info.Name == "gc_2299" && info.Password == "XXXXXX"){ApiResult result = new ApiResult();result.UserName = info.Name;result.Msg=GetToken(info.Name);return result;}else{return new ApiResult("身份验证失败", 500, false);}
}private string GetToken(string name)
{List<Claim> claims = new List<Claim>();claims.Add(new Claim(ClaimTypes.Name, name)); DateTime expres = DateTime.Now.AddSeconds(_jwtconfig.Value.Expres);byte[] secbyse = Encoding.UTF8.GetBytes(_jwtconfig.Value.Key);var secKey = new SymmetricSecurityKey(secbyse);var credetials = new SigningCredentials(secKey, SecurityAlgorithms.HmacSha256);var tokenDescriptor = new JwtSecurityToken(claims: claims, expires: expres, signingCredentials: credetials, issuer:_jwtconfig.Value.Issuer, audience: _jwtconfig.Value.Audience);return new JwtSecurityTokenHandler().WriteToken(tokenDescriptor);
}
前端登录页面也是直接复制的开源博客Blog项目中的后台登录页面,简化了不少东西。不过没法直接用它的js代码(使用jQuery的post方法调不到后台的login函数,暂时不清楚怎么回事儿,网上很多示例都是用的ajax,所以改成了ajax),将登录函数的js代码修改如下:
layui.use(['layer', 'form'], function () {var layer = layui.layer;var form = layui.form,$ = layui.jquery;form.on("submit(login)",function (data) {login();});function login() {var $btn = $("#btnLogin");$btn.text("登录中...").attr("disabled", "disabled").addClass("layui-disabled");var parm = {};$("form input").each(function () {parm[$(this).attr("name")] = $(this).val();}); $.ajax({type: 'POST',url: 'https://localhost:7051/Login/Login',contentType: 'application/json',data: JSON.stringify(parm),success: function (result) {if (result.statusCode == 200) {layer.msg("登录成功,欢迎" + result.userName +",你的token=" + result.msg);sessionStorage.setItem("user", result.userName)sessionStorage.setItem("token", result.msg);}else{layer.msg("登录失败,错误消息为:" + result.msg);}$btn.text('登录').removeClass("layui-disabled").removeAttr("disabled");},error: function () {layer.msg("登录失败");$btn.text('登录').removeClass("layui-disabled").removeAttr("disabled");}});}
});
最后是登录效果,截图如下:
从浏览器的会话存储空间中可以看到登录成功后保存的用户名及token,便于其它页面使用。
参考文献:
[1]https://www.jianshu.com/p/a2804e72d296
[2]https://blog.csdn.net/sD7O95O/article/details/85043160
[3]https://www.cnblogs.com/qiongkangle/p/13347283.html
[4]https://www.cnblogs.com/xbhp/p/17401507.html
[5]https://www.cnblogs.com/superstar/p/16491428.html
[6]https://blog.csdn.net/weixin_44877917/article/details/140609294
[7]https://blog.csdn.net/qq_40287041/article/details/143368882
相关文章:

学习ASP.NET Core的身份认证(基于JwtBearer的身份认证6)
重新创建WebApi项目,安装Microsoft.AspNetCore.Authentication.JwtBearer包,将之前JwtBearer测试项目中的初始化函数,jwt配置类、token生成类全部挪到项目中。 重新编写login函数,之前测试Cookie和Session认证时用的函数适合m…...

【SpringBoot】SpringBoot中分页插件(PageHelper)的使用
目录 1.分页概念 2.原生写法 3.PageHelper插件分页查询 3.1 介绍 3.2?使用 3.3 Page对象和PageInf对象 1.分页概念 用户查询的数据不可能一次性全部展示给用户(如果用户有一万条数据呢),而是分页展示给用户,这就是分页查询…...

【优选算法】4----盛最多水的容器
开始有点上强度了铁子们,这道算法题也是可以说很难理解的~ 想了好久才想明白~ ---------------------------------------begin--------------------------------------- 题目解析: 这一道题刚看题目,根本不知道在讲啥,但看到体积…...
EDI安全:2025年数据保护与隐私威胁应对策略
在数字化转型的浪潮中,电子数据交换(EDI)已成为企业间信息传递的核心基础设施。然而,随着数据规模的指数级增长和网络威胁的日益复杂化,EDI安全正面临前所未有的挑战。展望2025年,企业如何构建一套全面、高…...

代码随想录刷题day13|(链表篇)24.两两交换链表中的结点
目录 一、链表理论基础 二、思路及易错点 易错点 三、相关算法题目 四、错误代码分析 一、链表理论基础 代码随想录 (programmercarl.com) 二、思路及易错点 该题使用虚拟头结点正常进行模拟即可,有两个关键点,一是循环何时终止?终止…...

集群、分布式及微服务间的区别与联系
目录 单体架构介绍集群和分布式架构集群和分布式集群和分布式区别和联系 微服务架构的引入微服务带来的挑战 总结 单体架构介绍 早期很多创业公司或者传统企业会把业务的所有功能实现都打包在一个项目中,这种方式就称为单体架构 以我们都很熟悉的电商系统为例&…...

MySQL(4)多表查询
引言:为什么需要多表的查询? A:提高效率,多线进行。 高内聚、低耦合。 一、多表查询的条件 1、错误的多表查询: SELECT employee_id,department_name FROM employees,departments; SELECT employee_id,department…...
web前端3--css
注意(本文一切代码一律是在vscode中书写) 1、书写位置 1、行内样式 //<标签名 style"样式声明"> <p style"color: red;">666</p> 2、内嵌样式 1、style标签 里面写css代码 css与html之间分离 2、css属性:值…...

【Nacos】Nacos快速上手
Nacos快速上手 项目环境介绍一、服务注册/服务发现1.引入Spring Cloud Alibaba依赖2.引入Nacos相关的依赖3.引入Load Balance依赖4.配置Nacos的地址 二、修改远程调用代码三、测试四、启动多个服务,测试负载均衡五、可能出现的问题 项目环境介绍 请你确保你的服务器…...

C++otlv4连接sql serveer使用记录(注意点)
C使用otlv4在做插入时,有一些设计的坑需要注意 插入数据: 当要给表中插入单个字符时,数据库表设计使用varchar(1)是合理的,但是otlv4一直报错char。 后续查很久才知道,otlv4所写的绑定的字符数组的长度应该实际数组…...
在Linux中,如何查询已安装软件包的版本信息?
在Linux中,查询已安装软件包的版本信息可以使用多种方法,具体取决于你使用的Linux发行版及其所采用的包管理器。 RPM-based Linux系统(如Red Hat、CentOS、Dedora) 使用rpm命令查询所有已经安装的特定软件包及其版本:…...
搜广推实习面经四
字节跳动TAC 广告算法 一、回归任务的评价指标有哪些 1.均方误差(Mean Squared Error, MSE)/均方根误差(Root Mean Squared Error, RMSE) M S E 1 n ∑ i 1 n ( y i − y ^ i ) 2 MSE \frac{1}{n} \sum_{i1}^{n} (y_i - \ha…...

【Elasticsearch】inference ingest pipeline
Elasticsearch 的 Ingest Pipeline 功能允许你在数据索引之前对其进行预处理。通过使用 Ingest Pipeline,你可以执行各种数据转换和富化操作,包括使用机器学习模型进行推理(inference)。这在处理词嵌入、情感分析、图像识别等场景…...

AQS公平锁与非公平锁之源码解析
AQS加锁逻辑 ReentrantLock.lock public void lock() {sync.acquire(1);}AbstractQueuedSynchronizer#acquire public final void acquire(int arg) {if (!tryAcquire(arg) &&acquireQueued(addWaiter(Node.EXCLUSIVE), arg))selfInterrupt();}addWaiter就是将节点加入…...
若依框架在企业中的应用调研
若依框架作为一款基于 Spring Boot 的轻量级 Java 快速开发框架,在企业级应用开发中发挥着重要作用。以下是对其在企业中应用的调研情况: 应用现状 广泛应用于多种管理系统:在众多企业中,若依框架常被用于构建各类后台管理系统&a…...
【Day23 LeetCode】贪心算法题
一、贪心算法 贪心没有套路,只有碰运气(bushi),举反例看看是否可行,(运气好)刚好贪心策略的局部最优就是全局最优。 1、分发饼干 455 思路:按照孩子的胃口从小到大的顺序依次满足…...

2025年PHP面试宝典,技术总结。
面试是进入职场的第一道坎,因为我本身学校太一般的问题在面试中遇到了各种不爽,和那些高学历的相比自己真是信心大跌。我面试的方向是php开发工程师,主要做网站后台、APP接口等。下面是我这段时间总结的面试方面的常考常问的知识点࿰…...

Qt中的按钮组:QPushButton、QToolButton、QRadioButton和QCheckBox使用方法(详细图文教程)
💪 图像算法工程师,专业从事且热爱图像处理,图像处理专栏更新如下👇: 📝《图像去噪》 📝《超分辨率重建》 📝《语义分割》 📝《风格迁移》 📝《目标检测》 &a…...

influxdb+grafana+jmeter
influxdb influxd先启动 启动完成后执行 influxdb的端口号 grafana的启动 通过grafana-server.exe启动grafana 启动后打开 http://localhost:8087/...

Net Core微服务入门全纪录(三)——Consul-服务注册与发现(下)
系列文章目录 1、.Net Core微服务入门系列(一)——项目搭建 2、.Net Core微服务入门全纪录(二)——Consul-服务注册与发现(上) 3、.Net Core微服务入门全纪录(三)——Consul-服务注…...

大数据学习栈记——Neo4j的安装与使用
本文介绍图数据库Neofj的安装与使用,操作系统:Ubuntu24.04,Neofj版本:2025.04.0。 Apt安装 Neofj可以进行官网安装:Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以? 在 Golang 的面试中,map 类型的使用是一个常见的考点,其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...

shell脚本--常见案例
1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件: 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...
解锁数据库简洁之道:FastAPI与SQLModel实战指南
在构建现代Web应用程序时,与数据库的交互无疑是核心环节。虽然传统的数据库操作方式(如直接编写SQL语句与psycopg2交互)赋予了我们精细的控制权,但在面对日益复杂的业务逻辑和快速迭代的需求时,这种方式的开发效率和可…...
Linux离线(zip方式)安装docker
目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1:修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本:CentOS 7 64位 内核版本:3.10.0 相关命令: uname -rcat /etc/os-rele…...
SQL慢可能是触发了ring buffer
简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...
【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的“no matching...“系列算法协商失败问题
【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的"no matching..."系列算法协商失败问题 摘要: 近期,在使用较新版本的OpenSSH客户端连接老旧SSH服务器时,会遇到 "no matching key exchange method found", "n…...
深入浅出Diffusion模型:从原理到实践的全方位教程
I. 引言:生成式AI的黎明 – Diffusion模型是什么? 近年来,生成式人工智能(Generative AI)领域取得了爆炸性的进展,模型能够根据简单的文本提示创作出逼真的图像、连贯的文本,乃至更多令人惊叹的…...

tauri项目,如何在rust端读取电脑环境变量
如果想在前端通过调用来获取环境变量的值,可以通过标准的依赖: std::env::var(name).ok() 想在前端通过调用来获取,可以写一个command函数: #[tauri::command] pub fn get_env_var(name: String) -> Result<String, Stri…...

消息队列系统设计与实践全解析
文章目录 🚀 消息队列系统设计与实践全解析🔍 一、消息队列选型1.1 业务场景匹配矩阵1.2 吞吐量/延迟/可靠性权衡💡 权衡决策框架 1.3 运维复杂度评估🔧 运维成本降低策略 🏗️ 二、典型架构设计2.1 分布式事务最终一致…...