.NETCore Blazor使用localStorage存储登录信息

目录

1. JWT 登录并存储到 localStorage

2. 读取 JWT

3. 删除 JWT(用户退出)

4. 修改 JWT

5. 处理 JWT 过期

总结


在使用 JWT(JSON Web Token)进行身份验证时,除了生成和存储 JWT,还需要处理读取、删除和修改 JWT 的操作,以支持用户的登录、退出和令牌更新功能。以下是完善的示例代码和实现步骤。

1. JWT 登录并存储到 localStorage

首先生成 JWT 并将其存储到浏览器的 localStorage 中。

async Task login()
{if (AtsDAO.userLogin(userName, password)){// 假设 JwtHelper.GenerateToken 会根据用户名生成 JWTvar token = JwtHelper.GenerateToken(userName); // 将 token 存储到 localStorageawait js.InvokeVoidAsync("localStorage.setItem", "authToken", token);// 导航到成功页面NavigationManager.NavigateTo("/?token=loginsuccess", true);}else{await alert("用户名或密码错误!");}
}

2. 读取 JWT

要从 localStorage 中读取 JWT,可以使用 JavaScript 通过 IJSRuntime 调用来实现。

async Task<string> GetAuthToken()
{// 从 localStorage 读取 authTokenreturn await js.InvokeAsync<string>("localStorage.getItem", "authToken");
}

这段代码可以在 API 请求中使用,将令牌附加到 Authorization header 中进行身份验证。例如:

async Task<HttpResponseMessage> MakeApiRequest()
{var token = await GetAuthToken();if (!string.IsNullOrEmpty(token)){var client = new HttpClient();client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", token);return await client.GetAsync("https://your-api-endpoint");}return null;
}

3. 删除 JWT(用户退出)

当用户退出时,可以通过移除 localStorage 中的 authToken 来销毁 JWT:

async Task Logout()
{// 从 localStorage 移除 authTokenawait js.InvokeVoidAsync("localStorage.removeItem", "authToken");// 导航到登录页面或主页NavigationManager.NavigateTo("/login", true);
}

4. 修改 JWT

在某些情况下,你可能需要更新 JWT(例如令牌过期后)。可以通过以下方式修改 localStorage 中的 authToken

async Task UpdateAuthToken(string newToken)
{// 更新 localStorage 中的 authTokenawait js.InvokeVoidAsync("localStorage.setItem", "authToken", newToken);
}

5. 处理 JWT 过期

为了处理 JWT 过期问题,你可以在前端添加检查逻辑,解析令牌并验证其是否过期。可以使用 JavaScript 解析 JWT 并检查其 exp 字段(过期时间):

function isTokenExpired(token) {const payload = JSON.parse(atob(token.split('.')[1]));const exp = payload.exp * 1000; // exp 是秒,需要转换为毫秒return Date.now() >= exp;
}

在 Blazor 中调用这个 JavaScript 函数:

async Task<bool> IsAuthTokenExpired()
{var token = await GetAuthToken();return await js.InvokeAsync<bool>("isTokenExpired", token);
}

总结

以上代码展示了如何通过 JWT 实现用户登录、读取、修改和删除令牌的功能。通过将令牌存储在 localStorage 或 sessionStorage 中,可以实现无状态的用户认证,并在每次请求中附加令牌进行身份验证。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/882925.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ApacheShiro反序列化 550 721漏洞

Apache Shiro是一个强大且易用的Java安全框架,执行身份验证、授权、密码和会话管理个漏洞被称为 Shiro550 是因为在Apache Shiro的GitHub问题跟踪器中&#xff0c;该漏洞最初被标记为第550个问题,721漏洞名称也是由此而来 Shiro-550 CVE-2016-4437 Shiro反序列化Docker复现 …

Android GPU Inspector分析帧数据快速入门

使用 谷歌官方工具Android GPU Inspector (AGI) 可以对Android 应用进行深入和全面的系统性能分析和帧性能分析 。AGI 是一个非常强大的分析工具&#xff0c;尤其是在需要诊断 GPU 性能问题和优化应用时&#xff0c;可以帮助你精准找到性能瓶颈。本文介绍如何使用该工具对帧数据…

HTTP Proxy环境下部署Microsoft Entra Connect和Health Agents

在企业环境中&#xff0c;时常需要通过使用HTTP Proxy访问Internet&#xff0c;在使用HTTP Proxy访问Internet的环境中部署Microsoft Entra Connect和Microsoft Entra Connect Health Agents可能会遇到一些额外的配置步骤&#xff0c;以便这些服务能够正常连接到Internet。 一…

Windows系统PyCharm右键运行.sh文件

在参考了Windows系统下pycharm运行.sh文件&#xff0c;执行shell命令_shell在pycharm-CSDN博客 和深度学习&#xff1a;PyCharm中运行Bash脚本_pycharm bash-CSDN博客 配置了右键执行.sh文件之后&#xff0c;发现在Windows的PyCharm中直接右键运行sh文件&#xff0c;存在如下…

【MyBatis】MyBatis-config标签详解

目录 MyBatis配置文件标签详解configuration标签properties标签typeAliases标签environments标签environment标签transactionManager标签dataSource标签mappers标签 MyBatis配置文件标签详解 我们在使用MyBatis框架的时候需要一个配置文件——MyBatis-config.xml来告诉MyBatis…

Android按钮Button

Button是程序用于和用户进行交互的一个重要控件。Button也是继承自TextView&#xff0c;既可以显示文本&#xff0c;又可以显示图片&#xff0c;二者在UI上的区别主要是 Button 控件有个按钮外观&#xff0c;提示用户单击。 图1 Button示意图 Button最主要的功能是通过单击来执…

K折交叉验证代码实现——详细注释版

正常方法 #---------------------------------Torch Modules -------------------------------------------------------- from __future__ import print_function import numpy as np import pandas as pd import torch.nn as nn import math import torch.nn.functional as …

基于潜空间搜索的策略自适应组合优化(NeurIPS2023)(未完)

文章目录 Abstract1 Introduction2 Related work3 Methods3.1 预备知识3.2 COMPASS4 Experiments4.1 TSP、CVRP和JSSP的标准基准测试4.2 对泛化的鲁棒性:解决变异实例4.3 搜索策略分析5 ConclusionAbstract 组合优化是许多现实应用的基础,但设计高效算法以解决这些复杂的、通…

MongoDB Shell 基本命令(三)生成学生脚本信息和简单查询

一、生成学生信息脚本 利用该脚本可以生成任意个学生信息&#xff0c;包括学号、姓名、班级、年级、专业、课程名称、课程成绩等信息&#xff0c;此处生成2万名学生&#xff0c;学生所有信息都是给定范围后随机生成。 生成学生信息后&#xff0c;再来对学生信息进行简单查询。…

关于武汉芯景科技有限公司的限流开关芯片XJ6241开发指南(兼容LTC4411)

一、芯片引脚介绍 1.芯片引脚 二、系统结构图 三、功能描述 1.CTL引脚控制VIN和VOUT的通断 2.CTL引脚控制STAT引脚的状态 3.输出电压高于输入电压加上–VRTO的值&#xff0c;芯片处于关断状态

Artistic Oil Paint 艺术油画着色器插件

只需轻轻一点&#xff0c;即可将您的视频游戏转化为艺术品&#xff01;&#xff08;也许更多…&#xff09;。 ✓ 整个商店中最可配置的选项。 ✓ 六种先进算法。 ✓ 细节增强算法。 ✓ 完整的源代码&#xff08;脚本和着色器&#xff09;。 ✓ 包含在“艺术包”中。 &#x1f…

【数组知识的扩展①】

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” ArrayList在Java数组中的使用技巧 这篇博客灵感来源于某一天Aileen(&#x1f92b;)遇到了一道数组合并的题&…

python 文件防感染扫描

一、安装 首先&#xff0c;你需要安装 secplugs-python-client 库。你可以通过 pip 命令来安装&#xff1a; pip install secplugs-python-client确保你的 Python 环境已经正确设置&#xff0c;并且网络连接畅通&#xff0c;以便能够顺利安装。 二、基本用法 1. 初始化客户…

【记录】Windows|Windows 修改字体大全(Windows 桌面、VSCode、浏览器)

【记录】Windows&#xff5c;Windows 修改字体大全&#xff08;Windows 桌面、VSCode、浏览器&#xff09; 前言 最近从学长那里发现了一款非常美观的衡水体字体——Maple Mono SC NF。您可以通过以下链接下载该字体&#xff1a;https://github.com/subframe7536/maple-font/…

TiDB替换Starrocks:业务综合宽表迁移的性能评估与降本增效决策

作者&#xff1a; 我是人间不清醒 原文来源&#xff1a; https://tidb.net/blog/6638f594 1、 场景 业务综合宽表是报表生成、大屏幕展示和数据计算处理的核心数据结构。目前&#xff0c;这些宽表存储在Starrocks系统中&#xff0c;但该系统存在显著的性能瓶颈。例如&#…

Vue组件开发的属性

组件开发的属性&#xff1a; 1.ref属性&#xff1a; 如果在vue里&#xff0c;想要获取DOM对象&#xff0c;并且不想使用JS的原生语法&#xff0c;那么就可以使用ref属性 ref属性的用法&#xff1a; 1&#xff09;在HTML元素的开始标记中&#xff0c;或者在Vue子组件中的开始…

JVM、字节码文件介绍

目录 初识JVM 什么是JVM JVM的三大核心功能 JVM的组成 字节码文件的组成 基础信息 Magic魔数 主副版本号 其它基础信息 常量池 字段 方法 属性 字节码常用工具 javap jclasslib插件 阿里Arthas 初识JVM 什么是JVM JVM的三大核心功能 1. 解释和运行虚拟机指…

我的世界之合成

合成&#xff08;Crafting&#xff09;是一种在Minecraft中获得多种方块、工具和其他资源的方法。合成时&#xff0c;玩家必须先把物品从物品栏移入合成方格中。22的简易合成方格可以直接在物品栏中找到&#xff0c;而33的合成方格需要使用工作台或合成器来打开。 目录 1合成系…

LabVIEW智能螺杆空压机测试系统

基于LabVIEW软件开发的螺杆空压机测试系统利用虚拟仪器技术进行空压机的性能测试和监控。系统能够实现对螺杆空压机关键性能参数如压力、温度、流量、转速及功率的实时采集与分析&#xff0c;有效提高测试效率与准确性&#xff0c;同时减少人工操作&#xff0c;提升安全性。 项…

Ubuntu22.04 制作系统ISO镜像

第一步&#xff1a;安装软件-Systemback 1.如果已经添加过ppa&#xff0c;可以删除重新添加或者跳过此步 sudo add-apt-repository --remove ppa:nemh/systemback 2.添加ppa 我是ubuntu20&#xff0c;但这个软件最后支持的是 ubuntu16.04版本&#xff0c;所以加一个16版本…