翼度科技»论坛 编程开发 .net 查看内容

学习ASP.NET Core Blazor编程系列二十三——登录(3)

7

主题

7

帖子

21

积分

新手上路

Rank: 1

积分
21
学习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编程系列二十二——登录(1) 
       虽然在上一篇文章(学习ASP.NET Core Blazor编程系列二十三——登录(2))中我们制作出了登录页面,但那个登录页面,不符合我们平时使用的样式,需要进行修改,同时也没有实现登录验证。这一文章学习如何对Login.razor使用特有的布局组件,实现正常的登录样式,学习使用AuthenticationStateProvider类来进行登录验证。

五、LoginLayout组件

        登录页面的布局与之前的内容页面中的布局是不一样的。例如之前的图书编辑页面是有侧边导航栏的,但登录页面显然是不需要的。因此,我们需要单独写一个LoginLayout组件,和默认布局MainLayout分开,只用于Login页面:
     1. 在Visual Studio 2022的解决方案资源管理器中,鼠标左键选中“Pages”文件夹,右键单击,在弹出菜单中选择“添加—>Razor组件…”,并将组件命名为“LoginLayout.razor”。

    2.在Visual Studio 2022的文本编辑器中打开LoginLayout.razor,我们来创建登录页面的布局。代码中的“https://www.cnblogs.com/imgs/logo.png”所指定的logo图片,请自行准备。具体代码如下:
  1. @inherits LayoutComponentBase
  2.    
  3.    
  4.       
  5.             
  6.                
  7.                     <img src="https://www.cnblogs.com/imgs/logo.png" style="align-self:center" />
  8.                
  9.                
  10.                     <span style="color:black; font-size:24px">欢迎使用 @ProductionName 后台管理系统</span>
  11.                
  12.             
  13.         
  14.    
  15.    
  16.         
  17.             
  18.             
  19.                
  20.                     @Body
  21.                
  22.             
  23.         
  24.    
  25.    
  26.         <small class="text-muted">Copyright @Year 图书租赁系统  Powered by .NET 6.0 </small>
  27.    
  28. @code {
  29.     private const string ProductionName = "图书租赁";
  30.     private  int Year = DateTime.Now.Year;
  31. }
复制代码
 
   六. 修改Login.razor

   1.在Visual Studio 2022的文本编辑器中打开Login.razor,我们修改一下登录页面。具体代码如下:

 
  1. @page "/Login"
  2. @using BlazorAppDemo.Models
  3. @using BlazorAppDemo.Utils
  4. @layout LoginLayout
  5. @inject NavigationManager NavigationManager
  6.    
  7.         <h3>Login</h3>
  8.         <hr />
  9.         <EditForm  Model="loginModel" OnValidSubmit="SubmitHandler" OnInvalidSubmit="InvalidHandler">
  10.             <DataAnnotationsValidator />
  11.            
  12.             
  13.                 <label for="userName">  @HtmlHelper.GetDisplayName(loginModel ,m=> m.UserName)</label>
  14.                 <InputText @bind-Value="loginModel.UserName" class="form-control" id="userName" />
  15.                 <ValidationMessage For="()=>loginModel.UserName" />
  16.             
  17.             
  18.                 <label for="pwd"> @HtmlHelper.GetDisplayName(loginModel ,m=> m.Password)</label>
  19.                 <InputPassword @bind-Value="loginModel.Password" class="form-control" id="pwd" />
  20.                 <ValidationMessage For="()=>loginModel.Password" />
  21.             
  22.             <span class="form-control-plaintext"></span>
  23.             
  24.                
  25.             <button class="btn btn-primary">登录</button>
  26.                
  27.             
  28.         </EditForm>
  29.    
  30. @code {
  31.     private UserInfo loginModel = new UserInfo();
  32.     private void SubmitHandler()
  33.     {
  34.         Console.WriteLine($"用户名:{loginModel.UserName} ,密码:{loginModel.Password}");
  35.         NavigationManager.NavigateTo("/Index");
  36.     }
  37.     private void InvalidHandler()
  38.     {
  39.         Console.WriteLine($"用户名: {loginModel.UserName} ,密码:{loginModel.Password}");
  40.     }
  41. }
复制代码
 

 
 

七、修改路由与启动页面
          如何让Blazor知道当用登录用户是被授权访问的?答案是Blazor提供的AuthenticationStateProvider。如果razor组件使用CascadingAuthenticationState,Blazor在渲染前会检查AuthorizeRouteView中的/AuthorizeView/Authorized, NotAuthorized, Authorizing标签,并根据获取的信息在客户端进行渲染成是授权的UI,还是未授权的UI。

  1.在Visual Studio 2022的文本编辑器中打开app.razor,我们来添加CascadingAuthenticationState组件。具体代码如下:

 
  1. @using Microsoft.AspNetCore.Components.Authorization
  2. <CascadingAuthenticationState>
  3. <Router AppAssembly="@typeof(App).Assembly">
  4.     <Found Context="routeData">
  5.             <AuthorizeRouteView RouteData="@routeData" DefaultLayout="@typeof(MainLayout)" />
  6.         <FocusOnNavigate RouteData="@routeData" Selector="h1" />
  7.     </Found>
  8.     <NotFound>
  9.         <PageTitle>Not found</PageTitle>
  10.         <LayoutView Layout="@typeof(MainLayout)">
  11.             <h1>页面走失!请确认输入的URL是否正确!</h1>
  12.             <p role="alert">Sorry, there's nothing at this address.</p>
  13.         </LayoutView>
  14.     </NotFound>
  15. </Router>
  16. </CascadingAuthenticationState>
复制代码
 
     2. 在Visual Studio 2022的文本编辑器中打开MainLayou.razor,我们来添加AuthorizeView组件。具体代码如下:
 
  1. @inherits LayoutComponentBase
  2. <PageTitle>BlazorAppDemo</PageTitle>
  3.    
  4.         <NavMenu />
  5.    
  6.     <main>
  7.         <AuthorizeView>
  8.             <Authorized>
  9.               
  10.             <a href="https://docs.microsoft.com/aspnet/" target="_blank">About</a>
  11.         
  12.         <article class="content px-4">
  13.                     @Body
  14.         </article>
  15.             </Authorized>
  16.             <NotAuthorized>
  17.                
  18.                     <span style="font-size:20px">检测到登录超时,请重新<a target="_blank" href="https://www.cnblogs.com/login" style="text-decoration:underline">登录</a>!</span>
  19.                
  20.             </NotAuthorized>
  21.         </AuthorizeView>
  22.      
  23.     </main>
复制代码
       3. 在Visual Studio 2022的菜单栏上,找到“调试-->开始调试”或是按F5键,Visual Studio 2022会生成BlazorAppDemo应用程序,并在浏览器中打开Home页面,这时我们看到的不在是之前的页面,而是一个没有登录的提示信息。如下图。
 

4.使用鼠标左键点击“登录”超连接,页面进入到登录页面。如下图。

 

 
 


来源:https://www.cnblogs.com/chillsrc/archive/2023/02/05/17093077.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具