BlazorServer非鉴权的登录和注册

BlazorServer入门 简单的登录与注册的设计

🎃 前言:

为了简单起见,本文不采用Autherize标签等直接可用的工具来实现登录和注册的设计。

现创建一个BlazorServer模板,使用的.Net Core版本为3.1。

请添加图片描述
请添加图片描述

🎫Blazor需要创建页面(组件)时请直接使用.razor不要使用.cshtml

请添加图片描述

🍶 Step 1:模拟AuthService(模拟登录逻辑)

public class AuthService
{/// <summary>/// 该工具用来控制前台的js交换/// 这里使用该工具的目的是:调用js的向localStorage(浏览器)中保存信息。[如果你是3.1向上的.NetCore版本,请直接使用ProtectedLocalStorage保存信息]/// </summary>private IJSRuntime jsruntime;public AuthService(IJSRuntime jSRuntime){this.jsruntime = jSRuntime;}public static List<TestUser> list = new List<TestUser>() { new TestUser() { username = "root",password = "1234", nickname = "礼堂丁真", age = 27 } };public TestUser LoginMethod(string username,string password){if (list.Any(it => it.username.Equals(username) && it.password.Equals(password))){TestUser loginer = list.Where(it => it.username.Equals(username)).FirstOrDefault();jsruntime.InvokeVoidAsync("localStorage.setItem", new object[2] { "currentUser", JsonConvert.SerializeObject(loginer) });return loginer;} elsereturn null;}public (bool,string) Register(string username,string password,string nickname){if (string.IsNullOrEmpty(username) || string.IsNullOrEmpty(password) || string.IsNullOrEmpty(nickname))return (false, "Not NULL!");if (list.Any(it => it.username.Equals(username))){return (false,"用户名不能重复");}AuthService.list.Add(new TestUser() { username = username, password = password, nickname = nickname, age = 20 });jsruntime.InvokeVoidAsync("alert", new object[1] { "success" });return (true, "已注册");}
}public class TestUser
{public string username { get; set; }public string password { get; set; }public string nickname { get; set; }public int? age { get; set; }
}

注册到StartUp中

public void ConfigureServices(IServiceCollection services)
{services.AddRazorPages();services.AddServerSideBlazor();services.AddSingleton<WeatherForecastService>();services.AddScoped<AuthService>(); //注册IOC
}

🐟 Step 2:添加登录和注册页面(.razor组件)

@page "/login"@using Data;@inject AuthService auth
@inject NavigationManager nvm
@inject IJSRuntime runtime<h3>Login</h3><span>UN:</span>
<input type="text" class="input-group-text" id="UN" @bind-value="UserName" /><br /><span>PW:</span>
<input type="text" class="input-group-text" id="PW" @bind-value="PassWord" /><br /><button @onclick="()=> { DoLogin(UserName,PassWord);  }">Submit</button>@code {public string UserName { get; set; }public string PassWord { get; set; }public bool hid = true;public void DoLogin(string UserName,string PassWord){var User =  auth.LoginMethod(UserName, PassWord);if (User != null)nvm.NavigateTo($@"/");else{runtime.InvokeVoidAsync("alert", "Login failed");}}}
@page "/register"@using Data@inject AuthService auth
@inject NavigationManager nvm
@inject IJSRuntime jsruntime<h3>Register</h3><span>UN:</span>
<input type="text" class="input-group-text" @bind-value="UserName" />
<br /><span>PW:</span>
<input type="password" class="input-group-text" @bind-value="PassWord" />
<br />
<span>PW_confirm:</span>
<input type="password" class="input-group-text" @bind-value="PassWord2" />
<br /><button class="btn-info" @onclick="()=> { RegisterMethod(UserName, PassWord, PassWord2);  }"> regist </button>@code {public string UserName { get; set; }public string PassWord { get; set; }public string PassWord2 { get; set; }public void RegisterMethod(string UserName,string PassWord,string PassWord2){var res =  auth.Register(UserName, PassWord, PassWord2);if (res.Item1){jsruntime.InvokeVoidAsync("alert", "register success");nvm.NavigateTo("/login");}else{jsruntime.InvokeVoidAsync("alert", "register failed");}}}

为什么拦截其他页面,需要在你的其他页面添加OnAfterRenderAsync方法从写。

并在发放中检查存放的Storage信息是否有效。若找不到则直接导航到登录页。

例如:

@inherits LayoutComponentBase
@inject IJSRuntime runtime
@inject NavigationManager nvm<div class="sidebar"><NavMenu />
</div><div class="main"><div class="top-row px-4"><a href="https://docs.microsoft.com/aspnet/" target="_blank">About</a></div><div class="content px-4">@Body</div>
</div>@code{protected override async Task OnAfterRenderAsync(bool firstRender){//检查是否带有登录信息string user = await runtime.InvokeAsync<string>("localStorage.getItem", "currentUser");if (string.IsNullOrEmpty(user)){nvm.NavigateTo("/login");}base.OnAfterRender(firstRender);}}

🌮 Step 3:测试截图

请添加图片描述

项目代码已上传至gitcode

罗马苏丹默罕默德 / BlazorServerTest · GitCode

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/8753.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端vue入门(纯代码)20

总以为自己还很年轻&#xff0c;却忽略了岁月的脚步&#xff0c;当身边的一道道风景变成了回忆&#xff0c;才忽然发现&#xff0c;风景依然在&#xff0c;而人已非少年。&#xff01;&#xff01;&#xff01; 【22.求和案例--纯Vue版本】 太简单了&#xff0c;直接上代码案…

【macOS 系列】下载brew或其他依赖包提示连接超时的问题解决

在下载brew或其他依赖包提示连接超时 错误信息&#xff1a; curl: (7) Failed to connect to [raw.githubusercontent.com](http://raw.githubusercontent.com/) port 443 after 34 ms: Connection refused最简单的方式&#xff0c;就是修改DNS&#xff1a;为114.114.114.114…

QSciintilla_gpl-2.10.8版本在QT6中编译问题解决方案汇总

1. QWheelEvent &#xff08;1&#xff09;event->delta()需修改为event->angleDelta().y()&#xff1b; 2. sprintf": 不是 "QString" 的成员 sprintf->asprintf 3. 无法打开QTextCodec .pro文件中添加 greaterThan(QT_MAJOR_VERSION, 5) { …

精进ARM计算架构,催生人工智能产业的巨大跨越

在优化ARM计算架构以支持人工智能应用方面&#xff0c;以下是一些常见的方法和技术&#xff1a; 算法和模型设计优化&#xff1a;选择合适的算法和模型结构对于在ARM架构上高效执行人工智能任务至关重要。设计轻量级的模型、减少冗余操作和参数量&#xff0c;使用适合ARM架构的…

基于改进莱维飞行和混沌映射的粒子群算法(10种混沌映射随意切换),附matlab代码

“ 本篇文章对粒子群优化算法进行改进&#xff0c;首先通过引入混沌映射机制&#xff0c;对其群体进行初始化&#xff0c;增加粒子群个体的多样性&#xff1b;然后在粒子群个体的位置更新公式上引入改进的莱维飞行机制&#xff0c;提高搜索精度&#xff0c;帮助粒子群个体跳出局…

MySQL数据库引擎及账号管理

目录 前言 二、MySQL数据库引擎 1.是什么 2.MySQL的核心 3.MySQL的存储引擎 a.InnoDB(MySQL默认引擎) b.ACID事务 c.四种隔离级别 d.MyISAM e.MEMORY&#xff08;Heap&#xff09; 4.存储引擎查看 三、命令行操作数据库 四、账号管理 前言 MySQL安装请看MySQL的安装…

Matlab学习-轨迹热力图绘制

Matlab学习-轨迹热力图绘制 参考链接&#xff1a; MathWork-scatter函数使用 问题需求&#xff1a; 需要将轨迹上的点另一维信息同时显示在图上&#xff0c;比如横纵向误差等&#xff0c;这个时候画轨迹与误差的热力图就能很好同时反应位置和定位误差之间的关系&#xff1b;…

一建建筑周超口袋书

第一部分 建筑工程技术1A414000 建筑工程材料[B-4,2021] 常见的高分子防水卷材有哪些?三元乙丙、聚氯乙烯、氯化聚乙烯、氯化聚乙烯-橡胶共混及三元丁橡胶防水卷材记忆技巧三单数年考试中&#xff0c;2011 年屋面女儿墙渗漏水处理&#xff0c;2015 年女儿墙防水识图找错&#…

【Linux】进程信号之信号的产生

进程信号 一 一、信号入门1、信号的一些特性2、信号的处理方式信号捕捉初识 3、Linux下的信号 二、信号的产生1、通过终端按键产生信号2、调用系统函数向进程发信号a、kill函数b、raise函数c、abort函数 3. 由软件条件产生信号4、硬件异常产生信号 结语 一、信号入门 什么是信号…

游游画U(秒用c++ string函数)

看到这道题&#xff0c;第一反应是简单的模拟&#xff0c;上手就写&#xff0c;后来看大佬代码&#xff0c;还是我太蠢了 我的&#xff1a; #include <bits/stdc.h> using namespace std; typedef long long LL;int main() {int n;cin>>n;string s ""…

基于ssm实现图书商城(spring+springmvc+mybatis)

一、项目功能 前台 图书基本展示,包括推荐图书展示和类图书类型展示.推荐图书包括条幅推荐,热销推荐和新品推荐.按照图书类型展示商品.图书详细信息展示.图书加入购物车.修改购物车内图书信息,例如数量等.用户登录.用户注册.修改个人信息,包括密码和收获信息.购物车付款.用户…

Java实现office办公文档在线预览(word、excel、ppt、txt等)

文章目录 一、官网下载openOffice 安装包&#xff0c;运行安装&#xff08;不同系统的安装请自行百度&#xff0c;这里不做过多描述&#xff09; 二、pom中引入依赖 三、office文件转为pdf流的工具类 四、service层代码 五、controller层代码 office办公文档&#xff0c;如doc…