当前位置:网站首页>在Blazor 中自定义权限验证
在Blazor 中自定义权限验证
2022-07-26 09:34:00 【dotNET跨平台】
Blazor是什么
Blazor 是微软在 .NET 里推出的一个 WEB 客户端 UI 交互的框架,
使用 Blazor 你可以代替 JavaScript 来实现自己的页面交互逻辑,可以很大程度上进行 C# 代码的复用,Blazor 对于 .NET 开发人员来说是一个不错的选择。
需求背景
其实我对着这东西是挺反感的,但是没办法,这个是之前别人遗留的项目,那个哥们干了2个月就走人了。我那时候正好入职,也就交接给我了。我当时的态度是代码能正常编译运行就好了。其他的业务对不对就交给测试人员去验证。
之前只是实现了业务功能,但是连个权限验证也没有,现在要上线了,总不能裸奔吧,所以就需要加个权限验证。
代码实现
1、在公共部分 App.razor 加个输入用户名、验证码
<Form Model="@_vm.Data" Loading="_vm.Loading" LabelColSpan="8" WrapperColSpan="16">
<FormItem>
<Input @bind-Value="@context.username" />
</FormItem>
<FormItem>
<Input @bind-Value="@context.userpwd" />
</FormItem>
<FormItem WrapperColSpan="24" Style="text-align:center">
<Button HtmlType="button" OnClick="@( async () =>await login())">
登录
</Button>
</FormItem>
</Form>复制代码
2、实现登录事件OnClick="@( async () =>await login())
private loginVm _vm = new loginVm(); public async Task login()
{
var result = _vm.Data; if(result.username=="xxxx" && result.userpwd=="xxxxxxx")
{
await JsRuntime.InvokeAsync<string>("InitialCarousel"); Logined = true; }
else
{
ResetForm(); Logined = false; await JsRuntime.InvokeAsync<string>("alerterror"); }
}
private void ResetForm()
{
_vm.Data.username = ""; _vm.Data.userpwd = ""; }
public bool Logined; protected override async Task OnInitializedAsync()
{
await base.OnInitializedAsync(); try
{
var TValue = await JsRuntime.InvokeAsync<string>("returnInitialCarousel"); if(!string.IsNullOrWhiteSpace(TValue))
{
Logined = true; }
else
{
Logined = false; }
}
catch (Exception ex)
{
Logined = false; }
}
}复制代码
3、页面做个判断,有权限正常显示,没权限显示登录界面
<Router AppAssembly="@typeof(Program).Assembly">
<Found Context="routeData">
@if(Logined)
{
<RouteView RouteData="@routeData" DefaultLayout="@typeof(BasicLayout)" />
}
else
{
<LayoutView Layout="@typeof(BasicLayout)">
<Form Model="@_vm.Data" Loading="_vm.Loading" LabelColSpan="8" WrapperColSpan="16">
<FormItem>
<Input @bind-Value="@context.username" />
</FormItem>
<FormItem>
<Input @bind-Value="@context.userpwd" />
</FormItem>
<FormItem WrapperColSpan="24" Style="text-align:center">
<Button HtmlType="button" OnClick="@( async () =>await login())">
怬
</Button>
</FormItem>
</Form>
</LayoutView>
}
</Found>
<NotFound>
<LayoutView Layout="@typeof(BasicLayout)">
<p>Sorry, there's nothing at this address.</p>
</LayoutView>
</NotFound>
</Router>
<AntContainer />复制代码
4、这里我是用cookies做判断,登录的时候写入cookies,直接调用js方法实现
<script>
function alerterror() {
console.log(333); alert("账号或密码错误"); }
function InitialCarousel() {
console.log(222); document.cookie = "username=John Doe; path=/"; }
function returnInitialCarousel() {
console.log(111); var cname = "username"; var name = cname + "="; var ca = document.cookie.split(';'); for (var i = 0; i < ca.length; i++) { var c = ca[i].trim(); if (c.indexOf(name) == 0) return c.substring(name.length, c.length); }
return ""; }
</script>复制代码
效果
边栏推荐
猜你喜欢
随机推荐
Registration module use case writing
antUI中a-modal 拖拽功能制作
JS 连等赋值操作
Fiddler下载安装
面试突击68:为什么 TCP 需要 3 次握手?
Arc GIS basic operation 3
Process32First返回false,错误x信息24
matlab simulink实现模糊pid对中央空调时延温度控制系统控制
Basic use of ArcGIS 4
sublime 安装插件
高斯消元
注册模块用例编写
Node 内存溢出及V8垃圾回收机制
Great reward for interview questions
2020-12-29
“互联网+”时代的现代医学
JS 一行代码 获取数组最大值与最小值
I'm faded
Force deduction brush questions, sum of three numbers
服务器、客户端双认证