首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何配置Blazor应用程序以只返回经过身份验证的用户的index.html

如何配置Blazor应用程序以只返回经过身份验证的用户的index.html
EN

Stack Overflow用户
提问于 2022-01-05 04:32:56
回答 3查看 2.3K关注 0票数 5

我们有现有的ASP.NET核心应用程序(.NET 5),它使用角作为UI框架。

我们创建了一个Blazor客户端库,我们希望在这个应用程序中使用它,同时使用已经存在的角框架。

在文档之后,我们在Startup.Configure方法中将其配置为在www.root中的专用目录“balzor app”中“服务”balzor应用程序。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    // ...
    app.UseBlazorFrameworkFiles("/blazor-app");
    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllerRoute(name: "default", pattern: "{controller=Home}/{action=Index}/{id?}");
        endpoints.MapFallbackToFile("blazor-app/index.html");
    });
}

我们如何配置Blazor应用程序,所以它的index.html只返回给经过身份验证的用户?

比如这样的东西?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[Authorize]
public class ClientController
{
    public IActionResult ClientApp()
    {
        // returns Blazor app index.html
    }
}
EN

回答 3

Stack Overflow用户

发布于 2022-01-12 04:29:57

在为视图提供服务之前,有几种方法可以进行身份验证。我决定由ASP.Net会话管理层来做这件事。

将会话服务添加到应用程序中:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public void ConfigureServices(IServiceCollection services)
{
    services.AddControllersWithViews();
    services.AddDistributedMemoryCache();
    services.AddSession(options =>
    {
        options.IdleTimeout = TimeSpan.FromSeconds(3600); // an hour
        options.Cookie.HttpOnly = true;
        options.Cookie.IsEssential = true;
    });
   
}

然后在应用程序中使用会话:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
app.UseRouting();
// Call UseSession after UseRouting and before MapRazorPages and MapDefaultControllerRoute
app.UseSession();
app.UseAuthorization();

app.UseEndpoints(endpoints =>
{
    endpoints.MapControllerRoute(
        name: "default",
        pattern: "{controller=Home}/{action=Index}/{id?}");
});

现在,在提供视图之前,检查用户是否经过身份验证:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public IActionResult Index()
{
    string KEY = "Authentication-Key";
    if (string.IsNullOrEmpty(HttpContext.Session.GetString(KEY))|| 
        !IsValid(HttpContext.Session.GetString(KEY))){
        // Redirect to {Action = Index} of {Controller = Login}
        return RedirectToAction("Index", "Login"); 
    }
    return View(); // consider that this is the blazor view
}
private bool IsValid(string KEY)
{
    // Implement your validation mechanism
    
    return KEY == "THIS IS THE AUTH KEY";
}

让我们假设用户被重定向到Login页面之后,该页面被检测到未经过身份验证,并且再次得到身份验证,并接收到一个用于身份验证的密钥:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
string KEY = "Authentication-Key";
HttpContext.Session.SetString(KEY, "THIS IS THE AUTH KEY");

最后,当她/他手动或自动返回索引页面(ex:blazor视图)时,视图将被提供。

票数 0
EN

Stack Overflow用户

发布于 2022-01-14 09:21:10

Index.html是应用程序的入口点。如果您想为授权用户和未经授权的用户提供不同的UI (如果没有菜单),您应该提供不同的布局。下面的代码是App.razor的一部分。关键是要有一个附加的布局组件(UnauthorizedLayout),如果用户没有被授权,就会显示它。此布局中不包含任何元素,其唯一目的是承载登录视图。

AuthenticationService只是一个如何获得对用户的引用的例子,您可以使用您喜欢的任何方法。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<Router AppAssembly="@typeof(App).Assembly">
<Found Context="routeData">
    @if (AuthenticationService.User == null)
    {
        <AppRouteView RouteData="@routeData" DefaultLayout="@typeof(UnauthorizedLayout)" />
    }
    else
    {
        <AppRouteView RouteData="@routeData" DefaultLayout="@typeof(MainLayout)" />
    }
    @*<FocusOnNavigate RouteData="@routeData" Selector="h1" />*@
</Found>
<NotFound>
    ...
</NotFound>

UnathorizedLayout.razor:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@inherits LayoutComponentBase

<div id="container">
    @Body
</div>
票数 0
EN

Stack Overflow用户

发布于 2022-07-25 04:46:38

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<AuthorizeView>
<Authorized>
    <main class="main" >

        <div class="container-fluid" data-layout="container">

            <nav class="navbar navbar-light navbar-vertical navbar-expand-xl">

                
                <NavMenu></NavMenu>
            </nav>
            <div class="content">
                <!-- navbar -->
                <Toolbar></Toolbar>

                <!-- content -->
                @Body

                <!-- footer -->
                <Footer></Footer>
            </div>
        </div>

    </main>
</Authorized>
<NotAuthorized>
   <RedirectToLogin />

</NotAuthorized>

RedirectToLogin

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    @inject NavigationManager Navigation
@code {
    [CascadingParameter]
    private Task<AuthenticationState> AuthenticationStateTask { get; set; }

    protected override async Task OnInitializedAsync()
    {
        var authenticationState = await AuthenticationStateTask;

        if (authenticationState?.User?.Identity is null || !authenticationState.User.Identity.IsAuthenticated)
        {
            Navigation.NavigateTo("/Login", true);
        }
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70592930

复制
相关文章
Python - 从字典列表中删除字典
字典是python的一个非常常用的功能,用于根据用户需要在其中存储数据。另一个典型的过程涉及编辑或操作此数据。要成为一名高效且快速的程序员,您必须弄清楚如何从字典列表中删除字典。有许多技术可以从词典列表中删除字典,本文将介绍这些技术。
很酷的站长
2023/08/11
3010
Python - 从字典列表中删除字典
【Python】字典 dict ② ( 字典常用操作 | 字典 新增 / 更新 键值对元素 | 字典 删除 键值对元素 | 字典 清空 键值对元素 )
上面的语法 , 就是向 字典变量 中添加新的 键值对元素 键Key: 值Value ;
韩曙亮
2023/10/11
3440
如何使用Cook创建复杂的密码字典列表
Cook是一款功能强大的字典生成工具,该工具可以通过创建单词的排列和组合以生成复杂的字典和密码。Cook可以使用一系列预定于前缀、后缀、单词和模式来创建复杂的节点、字典和密码。
FB客服
2021/07/02
4K0
列表:创建列表
列表是Tcl语言中最重要的一种数据结构。什么是列表?列表是元素的有序集合,各个元素可以包含任何字符串,例如空格,反斜杠,换行符等。列表表现为特定结构的字符串,这意味着可以把它们赋值给一个变量,可以把它们做为参数传给命令,可以把它们嵌套到其他列表中。
Lauren的FPGA
2019/10/30
2.4K0
React 列表、键值与表单
例子中使用map方法将每个元素的值*2,最后得到的数组为:[2, 4, 6, 8, 10]。在React中,处理组件数组的方式与之类似。
随风溜达的向日葵
2018/08/01
2K0
python对列表中的字典按[key]时间排序
在翻看之前的一些面试题,发现其中有一个问题就是对列表中的字典按照某个key进行排序,题目是这样的:
the5fire
2019/02/28
5.8K0
22.Python对列表与字典的迭代
在Python中只要是可迭代对象,都可以通过for循环进行遍历。列表与字典都是可迭代对象,所以都可以通过for进行遍历。 1.列表的遍历
用户4381798
2020/07/30
1.9K0
python中列表排序,字典排序,列表中的字典排序
key= lambda dict1:dict1[0] #dict1[0]表示按键,dict1[1]表示按值。
用户8346838
2021/03/10
9.1K0
【Python】对字典列表进行去重追加
将M去重后的字典放入列表X中,得到X = [{dict1}, {dict2},{dict3}, {dict4}]
py3study
2020/01/07
1.9K0
使用 Python 删除大于特定值的列表元素
Lambda 函数,通常称为“匿名函数”,与普通的 Python 函数相同,只是它可以在没有名称的情况下定义。def 关键字用于定义普通函数,而 lambda 关键字用于定义匿名函数。但是,它们仅限于单一的表达方式。与常规函数一样,它们可以接受多个参数。
很酷的站长
2023/02/23
10.7K0
使用 Python 删除大于特定值的列表元素
0428(字典,列表,循环)
该字典应包含键first_name 、last_name 、age 和city 。通过循环录入3个学生信息,存储到列表中, 并使用循环完成每个人具体信息的打印
py3study
2020/01/16
1.6K0
列表,元祖,字典小记
1,建立列表,列表的元素可以包含任何数数据类型,可以是数字,字符串,列表,元组,字典,集合和布尔值
py3study
2020/01/19
7680
列表,元祖,字典小记
python列表、元组、字典
列表是由一序列特定顺序排列的元素组成的。可以把字符串,数字,字典等都可以任何东西加入到列表中,列表中的元素之间没有任何关系。列表也是自带下标的,默认也还是从0开始。列表常用方括号表示,即:[],元素用逗号隔开。
py3study
2020/01/15
1.2K0
python 使用列表和字典存储信息
"""     作者:白     时间:2018年1月9日     需求:假设你很多汽车,通过不断询问您是否要将车辆添加到您的库存中,     如果您这样做,那么它将会询问汽车的细节。如果没有,应用程
py3study
2020/01/10
1.1K0
Python-字典:键值对的魔法世界
在Python中,字典(Dictionary)是一种强大且常用的数据结构,它允许我们存储和组织键值对(Key-Value)数据。与列表和元组不同,字典中的数据是无序的,但每个数据都与一个唯一的键相关联,这使得字典在表示和访问数据时非常高效
用户9006224
2023/10/11
2630
使用 Python 创建使用 for 循环的元组列表
Python 的关键数据结构是列表和元组。元组元素一旦设置,就无法更改。这称为不可变性。但是列表元素可以在初始化后修改。在处理需要组合在一起的数据时,for 循环用于创建元组列表。列表比元组更具适应性,因为它们能够被修改。本教程演示如何使用 for 循环创建元组列表,从而简化重复性任务。
很酷的站长
2023/08/11
4060
使用 Python 创建使用 for 循环的元组列表
Python的字典与散列表
说明: 本文是上一篇《Python的可散列对象》的续篇,两者都是对《Python大学实用教程》和《跟老齐学Python:轻松入门》有关字典内容的进阶知识。
老齐
2021/03/11
4.7K0
Python列表、元组、字典操作
#!/usr/bin/python # -*- coding: UTF-8 -*- list1 = [1,2,'a', 'b'] seq = (1,4,5) print list1[2] #获取第三个元素(下标是从0开始) print list1[-3] #获取倒数第三个元素 print list1[2:] #获取第三个元素到最后一个 print len(list1) #获取列表元素个数 print max(list1) #获取最大的元素 print min(list1) #
苦咖啡
2018/04/28
1.7K0
python之列表、元组、字典
3 深拷贝和浅拷贝 1 浅拷贝: 当列表中存在有个列表时,其修改这个列表中列表的某一个元素时,其他被拷贝的列表中的对应元素也将被拷贝,其在拷贝这个列表中的列表时,拷贝的是这个内嵌列表的内存位置。
py3study
2020/01/14
2.8K0
python 字典、列表、json转换
#!/usr/bin/python3   import json      #python字典类型转换为json对象   data = {       'id' : 1,       'name' : 'test1',       'age' : '1'   }   data2 = [{       'id' : 1,       'name' : 'test1',       'age' : '1'   },{       'id' : 2,       'name' : 'test2',       '
一朵灼灼华
2022/08/05
1.4K0

相似问题

列表理解-尝试从键值对数组创建字典

514

使用列表理解从字典中创建字典列表

11

如何使用理解将列表项转换为字典键值对

20

创建具有多个键值对的字典列表

34

从字典列表中删除键值对

51
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文