学习ASP.NET Core Blazor编程系列二十二——登录(1)
通过前面的ASP.NET Core Blazor编程系列文章为读者介绍了Blazor及组件的相关基础概念,以及我们已经实现了用Blazor实现对数据的增删改查这四大基本功能,以及文件上传的功能,通过这些功能的实现我们已经能用Blazor处理一些简单的实际问题,特别是企业内部信息管理系统的相关问题。
前面的ASP.NET Core Blazor编程系列文章中却没有讲到信息管理系统中一个最基本功能——登录,有关登录功能的介绍
通过搜索引擎你可以搜索到很多关于如何基于Blazor开发登录页面的文章,不过大部分的Blazor登录示例是往往给出的是Identity Server的例子,包括微软自己的文档网站上的示例。
一、登录界面
要实现web系统的登录功能,首先要考虑登录的认证方式,Web系统常见的登录机制有Cookie、Session或Token。对于Web 1.0时代的应用来说,最好用的就是Session;而对Web 2.0时代之后,随着一些前端技术比如Vue、Angular、React、Blazor的兴起,前后端分离技术的应用,单页应用开始出现在各种项目中,后端采用Restful架构设计Web API接口,这些接口都是无状态的,因此一般只选择Cookie或Token,由前端持有自己的身份票据,后端做验证而不存储。
微软官方最推荐的方式是使用OAuth和OIDC。如果开发企业内部信息管理系统的后台,还要另搞一个OAuth服务器,对绝大多数的企业内部IT开发者来说维护和部署成本过高。接下来我要介绍的登录功能,不使用OAuth服务器,而是使用传统的用户名与密码模式+后端生成JWT。对企业内部后台应用来说,这么做已经足够安全。
接下来介绍的登录功能是基于JWT的企业内部应用登录(用户名/密码)认证,本文中的代码只是示例代码,并不保证代码在安全性,逻辑层的可靠性。
1. 在Visual Studio 2022的解决方案资源管理器中,鼠标左键选中“Models”文件夹,右键单击,在弹出菜单中选择“添加—>类”,并将类命名为“UserInfo”, 这个新增实体类作为登录表单用的Model。如下图。并添加如下代码:

using System.ComponentModel.DataAnnotations; namespace BlazorAppDemo.Models
{ public class UserInfo
{ [Key]
[Display(Name = "用户名")]
[Required]
[StringLength(30,MinimumLength =3)]
public string UserName { get; set; } [Display(Name = "密码")]
[Required]
[DataType(DataType.Password)]
[StringLength(30,MinimumLength =4)]
public string Password { get; set; } public DateTime LastLoginTime { get; set; } public DateTime ChangedPasswordTime { get; set; } }
}
二、将 “UserInfo” 类生成数据库表
1.在Visual Studio 2022的解决方案资源管理器中找到BookContext (Models/BookContext.cs) 文件,使用鼠标左键双击在文本编辑器中打开,添加UserInfo表的相关代码。代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore; namespace BlazorAppDemo.Models
{
public class BookContext:DbContext
{
public BookContext(DbContextOptions<BookContext> options)
: base(options)
{ } public DbSet<Book> Book { get; set; } public DbSet<FileDescribe> FileDescribe { get; set; } public DbSet<UserInfo> UserInfo { get; set; } }
}
2.在Visual Studio 2022中打开程序包管理器控制台 (PMC),“菜单栏>工具> NuGet 包管理器 > 程序包管理器控制台”。

3.在 PMC 中分别执行以下两条命令。这两条命令将实现向数据库中添加 UserInfo表,执行结果发下图。
Add-Migration AddUserInfoTable
Update-Database
4.在执行以上指令之后,会在数据库中添加UserInfo表,结果如下图。

学习ASP.NET Core Blazor编程系列二十二——登录(1)的更多相关文章
- 学习ASP.NET Core Blazor编程系列二——第一个Blazor应用程序(上)
学习ASP.NET Core Blazor编程系列一--综述 一.概述 Blazor 是一个生成交互式客户端 Web UI 的框架: 使用 C# 代替 JavaScript 来创建信息丰富的交互式 U ...
- 学习ASP.NET Core Blazor编程系列二——第一个Blazor应用程序(中)
学习ASP.NET Core Blazor编程系列一--综述 学习ASP.NET Core Blazor编程系列二--第一个Blazor应用程序(上) 四.创建一个Blazor应用程序 1. 第一种创 ...
- 学习ASP.NET Core Blazor编程系列二——第一个Blazor应用程序(下)
学习ASP.NET Core Blazor编程系列一--综述 学习ASP.NET Core Blazor编程系列二--第一个Blazor应用程序(上) 学习ASP.NET Core Blazor编程系 ...
- 学习ASP.NET Core Blazor编程系列二——第一个Blazor应用程序(完)
学习ASP.NET Core Blazor编程系列一--综述 学习ASP.NET Core Blazor编程系列二--第一个Blazor应用程序(上) 学习ASP.NET Core Blazor编程系 ...
- 022年9月12日 学习ASP.NET Core Blazor编程系列三——实体
学习ASP.NET Core Blazor编程系列一--综述 学习ASP.NET Core Blazor编程系列二--第一个Blazor应用程序(上) 学习ASP.NET Core Blazor编程系 ...
- 学习ASP.NET Core Blazor编程系列四——迁移
学习ASP.NET Core Blazor编程系列一--综述 学习ASP.NET Core Blazor编程系列二--第一个Blazor应用程序(上) 学习ASP.NET Core Blazor编程系 ...
- 学习ASP.NET Core Blazor编程系列五——列表页面
学习ASP.NET Core Blazor编程系列一--综述 学习ASP.NET Core Blazor编程系列二--第一个Blazor应用程序(上) 学习ASP.NET Core Blazor编程系 ...
- 学习ASP.NET Core Blazor编程系列六——初始化数据
学习ASP.NET Core Blazor编程系列一--综述 学习ASP.NET Core Blazor编程系列二--第一个Blazor应用程序(上) 学习ASP.NET Core Blazor编程系 ...
- 学习ASP.NET Core Blazor编程系列六——新增图书(上)
学习ASP.NET Core Blazor编程系列一--综述 学习ASP.NET Core Blazor编程系列二--第一个Blazor应用程序(上) 学习ASP.NET Core Blazor编程系 ...
- 学习ASP.NET Core Blazor编程系列八——数据校验
学习ASP.NET Core Blazor编程系列一--综述 学习ASP.NET Core Blazor编程系列二--第一个Blazor应用程序(上) 学习ASP.NET Core Blazor编程系 ...
随机推荐
- NLP之TextRNN(预测下一个单词)
TextRNN @ 目录 TextRNN 1.基本概念 1.1 RNN和CNN的区别 1.2 RNN的几种结构 1.3 多对多的RNN 1.4 RNN的多对多结构 1.5 RNN的多对一结构 1.6 ...
- Landau-Vishkin
基础算法 假设我们有两个字符串:,每个字符串由A C G T四个字母组成. 在两个字符串上,都有三种可能的编辑操作(突变): 删除某个字符 在某个位置插入字符 改变某个字符 每一个编辑操作都有惩罚值. ...
- ATT&CK框架整理(中英文整理)
工作需要了解了一下ATT&CK框架,留个记录.
- 微信支付v3接口的 官方 Java SDK
啰嗦几句:微信支付v3版接口麻烦吗?在对接微信支付v3接口时,本来是一件很简单的事情,其实微信支付v3接口并不是很复杂,但是微信团队的管理很混乱,给我们开发者带来了巨大的麻烦. 微信支付v3版接口对接 ...
- 秀++视频算法仓库-厂家对接规约V5
一.概要 (1)每个算法厂家在秀++云平台上会有一个厂商标识,譬如CS101:算法厂家可能有多个算法引擎,每个引擎有一个标识譬如Q101,引擎可以理解为一个可执行程序,可以同时分析多路算法:每个算法在 ...
- springcloud组件梳理之hystrix
在微服务架构体系中,各服务中间的相互调用是常态,没有哪个服务能保证自身百分百不会出问题,然后再加上网络的波动以及环境等问题,服务间调用的稳定性无法保证,这时候就需要一个有容错能力的组件来介入,当调用出 ...
- hutool包的DateUtil工具类
[首先引入依赖 ] <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-core& ...
- GAMES101课程 作业6 源代码概览
GAMES101课程 作业6 源代码概览 Written by PiscesAlpaca(双鱼座羊驼) 一.概述 本篇将从main函数为出发点,按照各cpp文件中函数的调用顺序和层级嵌套关系,简单分析 ...
- 利用KubeEdge在A500部署边缘推理任务
利用KubeEdge在A500部署边缘推理任务 目 录 1 环境介绍... 1 2 云端环境部署... 2 2.1 在master节点安装Docker和k8S (ubuntu) 2 2.1.1 ...
- 面向对象进阶(static&继承)
今日分享:static and 继承 static: staic是修饰符 可以修饰方法和变量 变量: 被static修饰的变量称为静态变量 特点: 该类的所有对象都共享同一个静态变量:不属于 ...