學習ASP.NET Core Blazor編程系列二十二——登錄(1)

来源:https://www.cnblogs.com/chillsrc/archive/2023/01/25/17067148.html
-Advertisement-
Play Games

概述 web管理系統中可以對業務數據執行新增和刪除,現在需要當業務數據發生新增或刪除操作後,儘可能實時的反應到WPF客戶端上面。 web管理系統用VUE編寫,後端服務為SpringBoot,WPF客戶端基於.Netframework4.8編寫。 整體架構 sequenceDiagram title: ...


學習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編程系列八——數據校驗 學習ASP.NET Core Blazor編程系列十三——路由(完) 學習ASP.NET Core Blazor編程系列十五——查詢 學習ASP.NET Core Blazor編程系列十六——排序  學習ASP.NET Core Blazor編程系列十七——文件上傳(上)      學習ASP.NET Core Blazor編程系列二十——文件上傳(完) 學習ASP.NET Core Blazor編程系列二十一——數據刷新    

      通過前面的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表,結果如下圖。

 

 

 

 
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • JavaScript 中有多種方法可以實現數組去重,下麵是幾種常用的方法: 1、使用 Set 去重:Set 數據結構中不能有重覆元素,可以將數組轉成 Set 類型,再轉回數組。 let arr = [1,2,3,4,5,6,2,3,4]; let uniqueArr = [...new Set(ar ...
  • 前言 為何要學習代碼?為何要學習這個代碼?怎麼學習這個代碼?可不可以學習這個代碼? 能做什麼,有什麼目標? ​ 基本的手機應用、簡單的PC游戲應用、大數據平臺;目標是以愛好為基準做一些游戲和程式; 與Python優缺幾何? ​ 入門難度有區別;一個更面向程式員群體一個則面向費程式員群體;各有優缺; ...
  • 本文作者通過分析微服務的常見優點能解決的問題,提出如何使用單體應用來緩解這些問題,最終指出採用微服務還是單體架構要根據團隊實際情況,而不是為了微服務而微服務。作者最後給出建議,中小團隊和新型團隊,建議採用單體架構,大中型團隊,可以採用微服務架構,但要充分權衡。 在 Web 軟體架構方面,微服務... ...
  • 這篇文章主要關註健康檢測相關的內容,包括服務提供方可能得狀態以及撞見間轉化、什麼是可用率、檢測程式的部署方式等。 ...
  • 題目來源 343. 整數拆分 題目詳情 給定一個正整數 n ,將其拆分為 k 個 正整數 的和( k >= 2 ),並使這些整數的乘積最大化。 返回 你可以獲得的最大乘積 。 示例 1: 輸入: n = 2 輸出: 1 解釋: 2 = 1 + 1, 1 × 1 = 1。 示例 2: 輸入: n = ...
  • 一、std::string 的底層實現 1、深拷貝 1 class String{ 2 public: 3 String(const String &rhs):m_pstr(new char[strlen(rhs) + 1]()){ 4 } 5 private: 6 char* m_pstr; 7 ...
  • 迴文數-力扣 來源:力扣(LeetCode) 鏈接:https://leetcode.cn/problems/palindrome-number 著作權歸領扣網路所有。商業轉載請聯繫官方授權,非商業轉載請註明出處。 題目描述 給你一個整數 x ,如果 x 是一個迴文整數,返回 true ;否則,返回 ...
  • c#處理null的幾個語法糖,非常實用。(尤其是文末Dictionary那個案例,記得收藏) ??如果左邊是的null,那麼返回右邊的操作數,否則就返回左邊的操作數,這個在給變數賦予預設值非常好用。 int? a = null; int b = a ?? -1; Console.WriteLine( ...
一周排行
    -Advertisement-
    Play Games
  • 1、預覽地址:http://139.155.137.144:9012 2、qq群:801913255 一、前言 隨著網路的發展,企業對於信息系統數據的保密工作愈發重視,不同身份、角色對於數據的訪問許可權都應該大相徑庭。 列如 1、不同登錄人員對一個數據列表的可見度是不一樣的,如數據列、數據行、數據按鈕 ...
  • 前言 上一篇文章寫瞭如何使用RabbitMQ做個簡單的發送郵件項目,然後評論也是比較多,也是準備去學習一下如何確保RabbitMQ的消息可靠性,但是由於時間原因,先來說說設計模式中的簡單工廠模式吧! 在瞭解簡單工廠模式之前,我們要知道C#是一款面向對象的高級程式語言。它有3大特性,封裝、繼承、多態。 ...
  • Nodify學習 一:介紹與使用 - 可樂_加冰 - 博客園 (cnblogs.com) Nodify學習 二:添加節點 - 可樂_加冰 - 博客園 (cnblogs.com) 介紹 Nodify是一個WPF基於節點的編輯器控制項,其中包含一系列節點、連接和連接器組件,旨在簡化構建基於節點的工具的過程 ...
  • 創建一個webapi項目做測試使用。 創建新控制器,搭建一個基礎框架,包括獲取當天日期、wiki的請求地址等 創建一個Http請求幫助類以及方法,用於獲取指定URL的信息 使用http請求訪問指定url,先運行一下,看看返回的內容。內容如圖右邊所示,實際上是一個Json數據。我們主要解析 大事記 部 ...
  • 最近在不少自媒體上看到有關.NET與C#的資訊與評價,感覺大家對.NET與C#還是不太瞭解,尤其是對2016年6月發佈的跨平臺.NET Core 1.0,更是知之甚少。在考慮一番之後,還是決定寫點東西總結一下,也回顧一下.NET的發展歷史。 首先,你沒看錯,.NET是跨平臺的,可以在Windows、 ...
  • Nodify學習 一:介紹與使用 - 可樂_加冰 - 博客園 (cnblogs.com) Nodify學習 二:添加節點 - 可樂_加冰 - 博客園 (cnblogs.com) 添加節點(nodes) 通過上一篇我們已經創建好了編輯器實例現在我們為編輯器添加一個節點 添加model和viewmode ...
  • 前言 資料庫併發,數據審計和軟刪除一直是數據持久化方面的經典問題。早些時候,這些工作需要手寫複雜的SQL或者通過存儲過程和觸發器實現。手寫複雜SQL對軟體可維護性構成了相當大的挑戰,隨著SQL字數的變多,用到的嵌套和複雜語法增加,可讀性和可維護性的難度是幾何級暴漲。因此如何在實現功能的同時控制這些S ...
  • 類型檢查和轉換:當你需要檢查對象是否為特定類型,並且希望在同一時間內將其轉換為那個類型時,模式匹配提供了一種更簡潔的方式來完成這一任務,避免了使用傳統的as和is操作符後還需要進行額外的null檢查。 複雜條件邏輯:在處理複雜的條件邏輯時,特別是涉及到多個條件和類型的情況下,使用模式匹配可以使代碼更 ...
  • 在日常開發中,我們經常需要和文件打交道,特別是桌面開發,有時候就會需要載入大批量的文件,而且可能還會存在部分文件缺失的情況,那麼如何才能快速的判斷文件是否存在呢?如果處理不當的,且文件數量比較多的時候,可能會造成卡頓等情況,進而影響程式的使用體驗。今天就以一個簡單的小例子,簡述兩種不同的判斷文件是否... ...
  • 前言 資料庫併發,數據審計和軟刪除一直是數據持久化方面的經典問題。早些時候,這些工作需要手寫複雜的SQL或者通過存儲過程和觸發器實現。手寫複雜SQL對軟體可維護性構成了相當大的挑戰,隨著SQL字數的變多,用到的嵌套和複雜語法增加,可讀性和可維護性的難度是幾何級暴漲。因此如何在實現功能的同時控制這些S ...