从零开始Blazor Server(3)--添加cookie授权
认证方式简述
Blazor Server微软官方还是推荐直接使用Cookie授权,因为本来Blazor Server就是前后端不分离的。不存在Cookie跨域等一系列问题。
只要不是使用SSO之类的统一登录方式,建议直接使用Cookie作为认证方式就行,简单方便。
添加Cookie认证
Blazor添加Cookie认证的方式跟MVC没什么区别,也是在Program.cs里添加对应的认证中间件。
添加Cookie认证方式
builder.Services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme).AddCookie();
增加认证中间件
app.UseAuthentication();
app.UseAuthorization();
这个处理是不是跟使用MVC的时候一模一样?
这里需要注意,Blazor Server只有第一次连接的时候会走中间件,之后连接成功就是SingalR了,不会每个请求都走中间件,所以之前的MVC的那种在中间件或者过滤器里进行处理的路子走不通了。
新建Login.razor
我们需要新建一个登录页面,本篇暂时只是放一个占位页,不实现登录,下一篇我们再来完成登录。
这里需要注意,Login页面应该是独立布局的,不应该有MainLayout的菜单布局,但是我们在App.razor里指定了默认布局,这里怎么办呢。
我们选用一种最简单的办法,就是新建一个空布局,让Login页面使用我们的空布局。
首先我们在Shared里面新建一个LoginLayout,这个就是一个空Layout。
LoginLayout.razor:
@inherits LayoutComponentBase
@Body
标准的一个Layout模板,继承于LayoutComponentBase,然后里面只有一个@Body。
然后新建一个Login.razor,指定它的布局为LoginLayout。
Login.razor:
@page "/Login"
@layout LoginLayout
<h3>Login</h3>
创建RedirectToLogin组件
这个组件没有其他任何作用,就是在未登录时跳转到登录页面。
REdirectToLogin.razor:
@inject NavigationManager NavigationManager
@code {
protected override void OnInitialized()
{
base.OnInitialized();
NavigationManager.NavigateTo("/Login", true);
}
}
这里注意,
NavigationManager.NavigateTo("/Login", true);方法在Debug时会报错,这个错误我个人认为是微软的锅,在.net 6上目前没找到什么合适的解决办法。这里报错就直接点击继续,不会有任何其他影响,并且Release下不会报错。如果你用Rider的Run来执行,也不会报错。
如果各位大佬知道如何能解决这个报错,请留言告诉我一下,感激不尽。
修改App.razor
这里我们需要把原来的RouteView修改为AuthorizeRouteView。
这个AuthorizeRouteView是Blazor自带的一个授权组件,它内部处理了授权信息,内部有NotAuthorized和Authorizing可供使用。
NotAuthorized即未授权的情况,这种情况如果不写,默认好像是显示一行文字,Not Authorized。内部是一个RenderFragment所以可以添加任何内容。Authorizing是授权认证中显示的文字,我们使用Cookie认证的话一般不会有这种情况,但是如果我们使用统一认证,或者其他网络认证的时候,可能会有等待认证的时间,这时候就会显示这里的内容。
我们需要的是跳转到登录页面,所以我们就在NotAuthorized的时候加载我们的RedirectToLogin的组件即可。
<NotAuthorized>
<RedirectToLogin></RedirectToLogin>
</NotAuthorized>
Index页面增加授权
这个最简单,就是在需要授权的页面上增加[Authorize]标签即可。
@attribute [Authorize]
这样我们直接F5运行程序,应该就会发现自动跳转到了Login路径下。
从零开始Blazor Server(3)--添加cookie授权的更多相关文章
- 从零开始Blazor Server(4)--登录系统
说明 上一篇文章中我们添加了Cookie授权,可以跳转到登录页了.但是并没有完成登录,今天我们来完成它. 我们添加Cookie授权的时候也说了,这套跟MVC一模一样,所以我们登录也是跟MVC一模一样. ...
- 从零开始Blazor Server(1)--项目搭建
项目介绍 本次项目准备搭建一个使用Furion框架,Blazor的UI使用BootstrapBlazor.数据库ORM使用Freesql的后台管理系统. 目前的规划是实现简单的注册,登录.增加管理员跟 ...
- 从零开始Blazor Server(15)--总结
我们用了14篇文章,基本上把一个后台管理系统需要的UI部分都说的差不多了.所以这套文章也该到了结束的时候了. 这里面有很多问题,比如我们直接使用UI来拉数据库信息而没有使用service,再比如我们大 ...
- 从零开始Blazor Server(10)--编辑角色
例图 目前的样式是这样的: 其中角色在一个table里,然后可以增删改查,并且可以给指定的用户分配权限. 创建文件 首先我们在Pages/Admin目录下新建一个Role.razor.因为我们的Adm ...
- 从零开始Blazor Server(6)--基于策略的权限验证
写这个的原因 现在BootstrapBlazor处于大更新时期,Menu组件要改为泛型模式. 本来我们的这一篇应该是把Layout改了,但是改Layout肯定要涉及到菜单,如果现在写了呢,就进入一个发 ...
- 从零开始Blazor Server(8)--增加菜单以及调整位置
这篇干啥 这篇文章主要是把前面的一些东西稍微调整一下,使其更适合后面的内容. 主要是两个事,一个是把原来的PermissionEntity直接变成MenuEntity,直接让最后一级是菜单,这样后面就 ...
- 从零开始Blazor Server(2)--整合数据库
开篇 上一篇文章我们留了个尾巴,没有把freesql整合进去,这篇文章我们来整合. 目前的思路呢,是做一个简单的四不像的RABC,也有用户.角色. 权限三部分. 但是其中每个用户只有一个角色,即用户和 ...
- 从零开始Blazor Server(11)--编辑用户
用户编辑和角色编辑几乎一模一样,这里先直接贴代码. @page "/user" @using BlazorLearn.Entity @using Furion.DataEncryp ...
- 从零开始Blazor Server(12)--编辑菜单
上个星期有点事,导致没法及时更新.现在我们继续更我们的从零开始系列. 这个系列也快要结束了,目前规划再有2-3篇,就结束了. 今天我们来说编辑菜单的问题,说实话菜单这种东西,你不更新代码加个页面,单独 ...
随机推荐
- 445. Add Two Numbers II - LeetCode
Question 445. Add Two Numbers II Solution 题目大意:两个列表相加 思路:构造两个栈,两个列表的数依次入栈,再出栈的时候计算其和作为返回链表的一个节点 Java ...
- 基于Python的渗透测试信息收集系统的设计和实现
信息收集系统的设计和实现 渗透测试是保卫网络安全的一种有效且必要的技术手段,而渗透测试的本质就是信息收集,信息搜集整理可为后续的情报跟进提供强大的保证,目标资产信息搜集的广度,决定渗透过程的复杂程度, ...
- FileAPI
FileAPI ```java File类的常见方法 1.创建. boolean createNewFile(); //创建文件 boolean mkdir();创建文件夹 boolean mkdir ...
- 奶盖拌饭 NKOJ8457
题意:一个无向图,每次询问给出一条边,问这条边的最大值满足这条边一定在这个图的最小生成树上,如果没有上限输出-1. 思路:考场上想过的,将分为两类,(非)树边. 1.亿点性质 非树边:加上这条边所构成 ...
- Jmeter之测试片段--include控制器进行接口测试以及管理测试用例
1.线程组--右键添加--测试片段--测试片段 2.在测试片段中进行添加测试用例如下图: 3.通过include控制器进行调用测试片段 (通常使用全局) 选择线程组--右键添加--逻辑控制器--Inc ...
- Tensorboard SummaryWriter()
import torch import torch.nn as nn import torch.nn.functional as F import torchvision import torchvi ...
- 基于SqlSugar的开发框架循序渐进介绍(7)-- 在文件上传模块中采用选项模式【Options】处理常规上传和FTP文件上传
在基于SqlSugar的开发框架的服务层中处理文件上传的时候,我们一般有两种处理方式,一种是常规的把文件存储在本地文件系统中,一种是通过FTP方式存储到指定的FTP服务器上.这种处理应该由程序进行配置 ...
- 数字格式化的 js 库
数字格式化的 js 库 Numeral.js,是一个用于格式化数字和处理数字的 js 库. Tip:目前 Star 有 9.2k,5年以前就没有在更新.其文档写得不很清晰,比如它提供了多语言,但如何切 ...
- Mysql中的小技巧
1.where 字段名 regexp '正则表达式' 正则符号: ^ $ . [ ] * | . 表示1个任意字符 * 表示前面重复0次,或者任意次 ^ 开始 $ 结尾 [] 范围 | 或 sql示例 ...
- label问题排查:打不开标注好的图像
问题描述 之前标注好的文件,标注有bbox和若干points.选择Open Dir打开图像目录,选择Change Output Dir选择json文件所在目录.发现有些图片能正常显示标注后的状态.而有 ...