通过前面三篇文章的学习,我们虽然实现了登录功能,但那还不是我们希望的登录首页。

我们希望的登录功能,用户在登录图书租赁系统的时候,如果没有进行登录是无法看到任何功能菜单,并且页面一直显示登录页面。

八、登录首页

创建RedirectToLogin组件

这个组件没有其他任何作用,就是在未登录时跳转到登录页面。

1. 在Visual Studio 2022的解决方案资源管理器中,鼠标左键选中“Pages”文件夹,右键单击,在弹出菜单中选择“添加—>Razor组件…”,并将组件命名为“RedirectToLogin.razor”。

2.在Visual Studio 2022的文本编辑器中打开RedirectToLogin.razor,我们来添加未登录转移到登录页面的代码。具体代码如下:

@inject NavigationManager NavigationManager

@code {
protected override void OnInitialized()
{
base.OnInitialized();
NavigationManager.NavigateTo("/Login", true);
}
}

3. 在Visual Studio 2022的文本编辑器中打开mainlayou.razor,我们修改组件中的登录验证相关的代码。

在前面的文章中我们在这个组件中添加了AuthorizeView这个Blazor自带的一个授权组件,它内部处理了授权信息,内部有NotAuthorized、Authorized和Authorizing可供使用。

NotAuthorized即未授权的情况,这种情况如果不写,默认是显示一行文字,Not Authorized。内部是一个RenderFragment,可以添加任何内容。

Authorizing是正在进行授权认证,此时用来显示相应的文字,我们使用Cookie认证的话一般不会有这种情况,但是如果我们使用统一认证,或者其他网络认证的时候,可能会有等待认证的时间,这时候我们提示信息就要写在这里。

Authorized是用户获得了授权之后,在这里可以显示相应的内容。

我们实现的是一个未登录就跳转到登录页面的功能,所以我们就在NotAuthorized的时候加载我们的RedirectToLogin的组件即可。具体代码如下:

@using BlazorAppDemo.Pages
@inherits LayoutComponentBase <PageTitle>BlazorAppDemo</PageTitle> <div class="page">
<div class="sidebar">
<NavMenu />
</div> <main>
<AuthorizeView>
<Authorized>
<div class="top-row px-4">
<a href="https://docs.microsoft.com/aspnet/" target="_blank">About</a>
</div> <article class="content px-4">
@Body </article>
</Authorized>
<NotAuthorized> <div style="margin: 120px 0; width:100%; text-align: center; color: red;"> <span style="font-size:20px">检测到登录超时,请重新<a href="/login" style="text-decoration:underline">登录</a>!</span> </div>
<RedirectToLogin></RedirectToLogin>
</NotAuthorized>
</AuthorizeView> </main> </div>

说明:我将前文中的提示文字保留,实际上我们并没有看到。

  • mainlayou.razor中的AuthorizeView,限制只有通过授权的用户才能成功登录系统。

4. 在Visual Studio 2022的菜单栏上,找到“调试-->开始调试”或是按F5键,Visual Studio 2022会生成BlazorAppDemo应用程序,并在浏览器中打开的不在是Index页面,这时我们看到的将是Login登录页面。如下图。

5.我们输入用户名与密码,进行模拟登录。页面无法进入首页面,永远在登录页面,这是由于我们并没有实现AuthenticationStateProvider的原因。

备注:

RedirectToLogin中的代码NavigationManager.NavigateTo("/Login", true);方法在Debug时会报错,在.net 6上目前没找到什么合适的解决办法。这里报错就直接点击继续,不会有任何其他影响,并且Release下不会报错。如图:

 

最新文章

  1. 理解CSS边框border
  2. 在Ubuntu下搭建Spark群集
  3. SQLite关系型数据库
  4. arcgis api for flex之专题图制作(饼状图,柱状图等)
  5. PHP取整函数:ceil,floor,round,intval的区别详细解析
  6. Javascript刷新页面的几种方法
  7. Css中光标,DHTML,缩放的使用
  8. Struct标签
  9. js处理数学经典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一 对兔子,假如兔子都不死,问每个月的兔子总数为多少?
  10. python连接redis文档001
  11. 高性能MySQL之【第十五章 备份与恢复】学习记录
  12. VS源码编译QuaZip(Windows下)
  13. UML类图10分钟快速入门 - From 圣杰
  14. 游戏UI框架设计(6): 消息传递中心
  15. XVIII Open Cup named after E.V. Pankratiev. Grand Prix of SPb
  16. 【BZOJ】1152: [CTSC2006]歌唱王国Singleland
  17. laravel Hash密码 校对
  18. tp5和gateworer集成
  19. linux之磁盘配额(quota)使用方法(转)
  20. 黑暗之光 Day1

热门文章

  1. 【Azure 事件中心】 org.slf4j.Logger 收集 Event Hub SDK(Java) 输出日志并以文件形式保存
  2. Django更换数据库和迁移数据方案
  3. MYSQL5.7 保姆级安装教程
  4. day18-web工程路径
  5. bugku web基础$_POST
  6. 【Advanced Installer】打包winfrom程序出现您没有任何数字签名的实用程序。请安装平台 SDK。错误
  7. github上fork2.4k,star8.7k的这款状态机,原来长这样!
  8. day27 CSS浮动、溢出 &amp; js基本语法 &amp; DOM文档流操作
  9. JavaEE Day12 Xml
  10. Flutter和Rust如何优雅的交互