IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Blazor Server 自定义登录退出鉴权判断 -> 正文阅读

[移动开发]Blazor Server 自定义登录退出鉴权判断

VS2022中的官方方案中,鉴权方案会用到SqlServer,而我的项目要用MySql,两者没法兼容,遂自己写了一套。

预备:用VS2022新建一个Blazor Server项目

?

第一步:编写自定义的登录,退出,鉴权类?SessionObjectHelper.cs,并且在Program.cs里注册

using Microsoft.AspNetCore.Components;
using Microsoft.AspNetCore.Components.Server.ProtectedBrowserStorage;

namespace BlazorAppAuthDemo
{
    public class SessionObjectHelper
    {
        private ProtectedSessionStorage _sessionStorage;

        public SessionObjectHelper(ProtectedSessionStorage storage)
        {
            _sessionStorage = storage;
        }

        /// <summary>
        /// 是否登录
        /// </summary>
        /// <returns></returns>
        public async Task<bool> IsLogin()
        {
            var value = await _sessionStorage.GetAsync<string>("user");

            if (value.Success && !string.IsNullOrEmpty(value.Value))
            {
                return true;
            }
            else
            {
                return false;
            }
        }

        /// <summary>
        /// 是否有权限
        /// </summary>
        /// <returns></returns>
        public async Task<bool> HasAuth(string authString)
        {
            var value = await _sessionStorage.GetAsync<string>("user");

            if (value.Success && !string.IsNullOrEmpty(value.Value))
            {
                if (!string.IsNullOrEmpty(authString) && authString.Equals(value.Value))
                {
                    return true;
                }

                return false;
            }
            else
            {
                return false;
            }
        }

        public async Task<string> GetSession()
        {
            var value = await _sessionStorage.GetAsync<string>("user");

            return value.Success?value.Value:"";
        }

        public async Task SetSession(string value)
        {
            await _sessionStorage.SetAsync("user", value);
        }

        /// <summary>
        /// 设置过期
        /// </summary>
        /// <returns></returns>
        public async Task SetExpires()
        {
            await _sessionStorage.SetAsync("user", "");
        }
    }
}

在Program.cs里注册?

builder.Services.AddScoped<SessionObjectHelper>();

?

第二步:自定义鉴权的控件?AuthComponet.razor

@using BlazorAppAuthDemo.Data
@inject SessionObjectHelper Session

@if (Logined)
{
	@if (doNotReload)
	{
		<p>出现错误,请点此刷新</p>
	}
	else
	{
		@if (HasAuth)
		{
			<CascadingValue Value="@this">
				@ChildContent
			</CascadingValue>
		}
		else
		{
			<p>暂无权限查看...</p>
		}
	}
}
else
{
	<p>尚未登录,请先 <a href="/login">登录</a></p>
}

@code {



	public bool Logined;

	public bool HasAuth;

	private bool doNotReload;


	[Parameter]
	public RenderFragment ChildContent { get; set; }


	[Inject]
	NavigationManager Navigation { get; set; }


	[Parameter]
	public string AuthString { get; set; }

	public string UserAuths { get; set; }

	protected override async Task OnInitializedAsync()
	{
		try
		{
			if (await Session.IsLogin())
			{
				Logined = true;

				if (await Session.HasAuth(AuthString))
				{
					HasAuth = true;
				}
			}

		}
		catch (Exception ex)
		{
			doNotReload = true;

			//Navigation.NavigateTo("/", true, true);
		}

	}
}

第三步:使用

1、登录页面Login.razor及方法使用

@page "/Login"

@inject SessionObjectHelper Session

<h3>登录</h3>



@code {


	protected override async Task OnAfterRenderAsync(bool firstRender)
	{

		await Session.SetSession("abc");


		await base.OnAfterRenderAsync(firstRender);
	}

}

2、退出登录页面Logout.razor及方法使用

@page "/Logout"

@using Microsoft.AspNetCore.Components.Server.ProtectedBrowserStorage
@inject SessionObjectHelper Session

<h3>Logout</h3>

@code {

	protected override async Task OnAfterRenderAsync(bool firstRender)
	{
		await Session.SetSession(null);

		await base.OnAfterRenderAsync(firstRender);
	}

}

3、鉴权页面Counter.razor及方法使用

@page "/counter"
@using BlazorAppAuthDemo.Data
@using Microsoft.AspNetCore.Components.Server.ProtectedBrowserStorage

<PageTitle>Counter</PageTitle>

<h1>Counter</h1>

<p role="status">Current count: @currentCount</p>

<button class="btn btn-primary" @onclick="IncrementCount">Click me</button>


<span>是否登录 @(IsLogin)</span>

<span>是否是否有权限 @(HasAuth)</span>

<AuthComponet>

    <span>哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈</span>

</AuthComponet>


@code {


    private bool IsLogin{ get; set; }

    private bool HasAuth{ get; set; }


    private int currentCount = 0;

    private void IncrementCount()
    {
        currentCount++;
    }

    [Inject] 
    public SessionObjectHelper Session { get; set; } = default;


    protected override async Task OnAfterRenderAsync(bool firstRender)
    {
        if (firstRender)
        {
            IsLogin = await Session.IsLogin();

            HasAuth = await Session.HasAuth("sdef");

            this.StateHasChanged();
        }

        await base.OnAfterRenderAsync(firstRender);

    }
}

最后:验证效果

点击Counter页面,会发现有未登录和没有权限的提示

?

手动改URL为:BlazorAppAuthDemoicon-default.png?t=M1L8http://localhost:2254/login

自己玩吧:)

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-02-24 15:24:46  更:2022-02-24 15:24:54 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年9日历 -2024/9/21 8:39:26-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码