今天研究了一下blazor,发现他默认启动就是类似于后台管理系统的界面,看到这个页面我就想给他写个登录,有登录就涉及到未登录重定向的问题,但是我没有找到blazor全局路由的设置,知道的老哥可以告诉我一下哈,在这里我是基于操作LocalStorage的方法,如果访问默认布局时若没有LocalStorage,就重定向到login页,其实也可以判断不存在LocalStorage就将布局渲染为登录页,也不知道那种正规,我采用的是重定向的方法

首先新建一个类叫LocalStorageHelper.cs 用来调用js操作LocalStorage

using Microsoft.JSInterop;
using System.Threading.Tasks; namespace BlazorLoginTest
{
/// <summary>
/// 操作LocalStorage帮助类
/// </summary>
public class LocalStorageHelper
{
private readonly IJSRuntime _jsRuntime;
public LocalStorageHelper(IJSRuntime jsRuntime)
{
_jsRuntime = jsRuntime;
}
/// <summary>
/// 设置LocalStorage
/// </summary>
/// <param name="key"></param>
/// <param name="value"></param>
/// <returns></returns>
public async Task SetLocalStorage(string key, string value)
{
await _jsRuntime.InvokeVoidAsync("LocalStorageSet", key, value);
}
/// <summary>
/// 获取LocalStorage
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
public async Task<string> GetLocalStorage(string key)
{
return await _jsRuntime.InvokeAsync<string>("LocalStorageGet", key);
}
}
}

然后在wwwroot文件夹下面新建js文件夹 新建文件LocalStorageHelper.js

function LocalStorageSet(key, value) {
localStorage.setItem(key, value);
};
function LocalStorageGet(key) {
return localStorage.getItem(key);
};

index.html里面引用一下这个js

<script src="js/LocalStorageHelper.js"></script>

到Pages文件夹里面新建一个razor组件 Login.razor

@page "/login"
@layout LoginLayout
@inject IJSRuntime JSRuntime
@inject NavigationManager navigationManager <form class="form-horizontal">
<div class="form-group">
<label for="inputEmail3" class="col-sm-2 control-label">请输入邮箱地址</label>
<div class="col-sm-10">
<input type="email" class="form-control" id="inputEmail3" placeholder="Email" @bind-value="@Email">
</div>
</div>
<div class="form-group">
<label for="inputPassword3" class="col-sm-2 control-label">请输入密码</label>
<div class="col-sm-10">
<input type="password" class="form-control" id="inputPassword3" placeholder="Password" @bind-value="@Password">
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<button type="button" class="btn btn-primary" @onclick="LoginMethod">Sign in</button>
</div>
</div>
</form>
@code{
private string Email { get; set; }
private string Password { get; set; }
private async Task LoginMethod()
{
if (Email == "admin@abc.com" && Password == "123456")
{
Console.WriteLine("登录成功");
LocalStorageHelper localStorageHelper = new LocalStorageHelper(JSRuntime);
await localStorageHelper.SetLocalStorage("email", Email);
navigationManager.NavigateTo("/", false); }
} }

因为登录页面如果使用默认布局就会也显示左侧导航,所以需要给他指定一个布局 在shared文件夹下面新建文件LoginLayout.razor

@inherits LayoutComponentBase
<div class="main">
<div class="top-row px-4">
<a href="http://blazor.net" target="_blank" class="ml-md-auto">About</a>
</div> <div class="content px-4">
@Body
</div>
</div>

启动项目 手动输入网址https://localhost:44344/login

用户名 admin@abc.com

密码 123456

登录成功可以进入首页 发现LocalStorage已经成功写入数据了

最后去默认布局文件MainLayout.razor里面,重新组件初始化方法,判断LocalStorage里面是否存在email,不存在则重定向到登录页

@inherits LayoutComponentBase
@inject IJSRuntime JSRuntime
@inject NavigationManager navigationManager
<div class="sidebar">
<NavMenu />
</div> <div class="main">
<div class="top-row px-4">
<a href="http://blazor.net" target="_blank" class="ml-md-auto">About</a>
</div> <div class="content px-4">
@Body
</div>
</div>
@code{
protected override async Task OnInitializedAsync()
{
LocalStorageHelper localStorageHelper = new LocalStorageHelper(JSRuntime);
if (string.IsNullOrEmpty(await localStorageHelper.GetLocalStorage("email")))
{
navigationManager.NavigateTo("Login");
}
}
}

可以清空LocalStorage刷新试一下,发现已经重定向到登录页了

如果只想设置某些组件需要登录,可以再写一个组件用来判断,然后在需要登录的组件里引用那个组件就好了

只不过麻烦了一点,但是在默认布局里面写判断的话,如果用户不刷新就不会执行初始化里面的代码了

源码地址

Blazor实现未登录重定向到登录页的方法的更多相关文章

  1. 三界商城 ajax调用城市接口,竟然需要登录,调用的接口需要登录,如果不登录 重定向到登录

    现象 商家入驻 填写信息的 ajax请求没有数据 network->name-headers 返回302 发现调用的接口,需要登录,否则重定向登录 //初始化用户信息查询 public func ...

  2. Django 登录验证-自动重定向到登录页

    Web项目有些场景需要做用户登录验证,以便访问不同页面. 方法一:login_required装饰器 适用于函数视图. from django.contrib.auth.decorators impo ...

  3. C#-WebForm-Session、Cookie-登录验证(未登录跳至登录界面)、隐藏地址栏传值

    Post 传值(看不见的传值) Get 传值(看得见的传值) Session - 全局变量组 存放位置:服务端 作用:只要里面有内容,那么这个网站中所有的C#端都能访问到这个变量 -- object类 ...

  4. ASP.NET Core 实现跨站登录重定向的新姿势

    作为 .NET 程序员,痛苦之一是自从 ASP.NET 诞生之日起直到最新的 ASP.NET Core 都无法直接实现跨站登录重定向(比如访问 https://q.cnblogs.com ,跳转到 h ...

  5. cookie理解与实践【实现简单登录以及自动登录功能】

    cookie理解 Cookie是由W3C组织提出,最早由netscape社区发展的一种机制 http是无状态协议.当某次连接中数据提交完,连接会关闭,再次访问时,浏览器与服务器需要重新建立新的连接: ...

  6. 如何从零开始对接第三方登录(Java版):QQ登录和微博登录

    前言 个人网站最近增加了评论功能,为了方便用户不用注册就可以评论,对接了QQ和微博这2大常用软件的一键登录,总的来说其实都挺简单的,可能会有一点小坑,但不算多,完整记录下来方便后来人快速对接. 后台设 ...

  7. Spring Security4.1.3实现拦截登录后向登录页面跳转方式(redirect或forward)返回被拦截界面

    一.看下内部原理 简化后的认证过程分为7步: 用户访问网站,打开了一个链接(origin url). 请求发送给服务器,服务器判断用户请求了受保护的资源. 由于用户没有登录,服务器重定向到登录页面 填 ...

  8. 混合应用 微信登录授权 微信登录认证失败 ios PGWXAPI错误-1 code:-100 / 安卓 message:invalid appsecret innerCode:40125

    最近项目需要做微信登录,于是利用HTML5+ API Reference的OAuth模块管理客户端的用户登录授权验证功能,允许应用访问第三方平台的资源.(链接:https://www.dcloud.i ...

  9. .NET MVC中登录过滤器拦截的两种方法

    今天给大家介绍两种ASP中过滤器拦截的两种方法. 一种是EF 的HtppModule,另一种则是灵活很多针对MVC的特性类 Attribute 具体什么是特性类可以参考着篇文章:https://www ...

随机推荐

  1. 手把手教你docker安装宝塔面板

    手把手教你docker安装宝塔面板(针对小白提一下:需要先安装docker,安装docker的教程请自行百度,非常简单的),docker安装宝塔面板教程如下: 一.拉取centos镜像(当然这里拉取别 ...

  2. java例题_22 用递归求阶乘 5!

    1 /*22 [程序 22 递归求阶乘] 2 题目:利用递归方法求 5!. 3 程序分析:递归公式:fn!=fn*4! 4 */ 5 6 /*分析 7 * 递归:如果其中每一步都要用到前一步或前几步的 ...

  3. Android学习之CoordinatorLayout+FloatingActionButton+Snackbar

    CoordinatorLayout •简介 CoordinatorLayout 协调布局,可以理解为功能更强大的 FrameLayout 布局: 它在普通情况下作用和 FrameLayout 基本一致 ...

  4. mybatis-plus的Could not set property 'updateDate' of 'class com.example.pojo.User' with value 'Fri Jul 24 10:29:39 CST 2020' Cause: java.lang.IllegalArgumentException: argument type mismatch解决方案

    按照官网在写mybatis-plus的自动填充功能一直报错,发现官网的解说不全,数据库是datetime类型,java程序又是date,类型不匹配 org.mybatis.spring.MyBatis ...

  5. Java基础回顾_第一部分

    Java基础回顾 基本数据类型 数值类型 什么是字节? 位(bit):是计算机中数据的最小单位 字节(byte):是计算机中数据处理的基本单位,习惯上用大写字母B来表示 1 B = 8 bit 字符: ...

  6. 「HTML+CSS」--自定义加载动画【009】

    前言 Hello!小伙伴! 首先非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您指出- 哈哈 自我介绍一下 昵称:海轰 标签:程序猿一只|C++选手|学生 简介:因C语言结识编程,随后转入计算机 ...

  7. 201871010109-胡欢欢-实验一-软件工程的准备(初识github及《现代软件工程-构建之法》)

    项目 内容 课程班级博客链接 2021年春软件工程课程班(2018级计算机科学与技术) 这个作业要求链接链接 实验一软件工程准备 我的课程学习目标 了解github的基本使用,学习markdown编辑 ...

  8. BUAAOO第二单元代码分析

    第一次作业 设计思路与感想 第一次作业是要求有捎带的电梯实现, 第一次作业是花费的时间比较长的一次,花费了很多的时间去思考架构的问题.起初是想要搞三个线程的:输入线程,调度器线程和电梯线程,想要搞一个 ...

  9. Django中的CBV视图

    Web 开发是一项无聊而且单调的工作,特别是在视图功能编写方面更为显著.为了减少这种痛苦,Django植入了视图类这一功能,该功能封装了视图开发常用的代码,无须编写大量代码即可快速完成数据视图的开发, ...

  10. 浅谈 C# Assembly 与 IL (一):C# Assembly 与 Reflection

    作者:Compasslg 前言 前一阵子想利用闲余时间写一个 Unity 游戏的翻译工具,主要是用于翻译一些内嵌在代码中的文本,最初想偷懒看了一下网上的教学推荐说可以先利用DnSpy.ILSpy等工具 ...