如何在 Blazor 服务器应用程序中以编程方式注销(身份)

2024-01-11

在我的代码中,我处理 DbUpdateConcurrencyException ,对于更新用户帐户的情况,并且用户不再存在,我想将他们注销 - 因为他们不再是有效用户。

当然,这不是什么大问题,因为这种情况应该很少见,他们尝试访问的任何页面都不会接受他们,因为他们不再有声明。但将它们注销更干净。

我无法在 Blazor 中使用 SignInManager。

要使用身份库 LogOut.cshtml,需要对页面进行 POST 才能注销,因为这个安全问题 https://stackoverflow.com/questions/25710805/why-does-logout-in-asp-net-identity-use-post-instead-of-get.

那么,如何强制从代码中注销呢?有很多文章介绍为什么它必须是 POST 以及如何创建页面来执行此操作。但没有(我能找到的)强制注销的方法,而不是要求用户单击提交。


在 Logout.cshtml 页面中,当通过 GET 检索页面时,您可以使用 javascript 立即执行自动 POST。

注销.cshtml:

@page
@model MyApp.Pages.LogoutModel

<form method="post"></form>

@section Scripts {
<script>
    window.onload = function () {
        document.forms[0].submit();
    };
</script>
}

注销.cshtml.cs:

using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;

namespace MyApp.Pages
{
    [IgnoreAntiforgeryToken]
    public class LogoutModel : PageModel
    {
        public async Task<IActionResult> OnPostAsync()
        {
            await HttpContext.SignOutAsync();
            return Redirect("/");
        }
    }
}

然后,在您要执行注销的 Blazor 组件中:

@inject NavigationManager nav
...
nav.NavigateTo("/Logout", true);

(基于所描述的方法here https://stackoverflow.com/a/74080228/1531760)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Blazor 服务器应用程序中以编程方式注销(身份) 的相关文章

随机推荐

  • unpack_from 需要至少 4 个字节的缓冲区

    我收到来自客户端的数据包 其中包含许多字段 我成功读取了所有字段 但是当涉及到最后一个字段 tag end 时 python 给了我一个错误 unpack from 需要至少 4 个字节的缓冲区未找到 这是代码 def set bin se
  • django - 通过过滤对象列表来获取对象列表

    我正在创建用户活动流 活动模型 class Activity models Model actor models ForeignKey User action models CharField max length 100 content
  • 多行的自定义图例,同一文本有两个标记

    I would like perform the type of legend shown in the figure 我用一些技巧做的那个图只是为了代表我真正想要的东西 所以它不能很好地显示图例中粉红色标记的颜色 图中圆圈代表两个不同模型
  • 在 Visual Studio Code 上使用 ,但显示“无法从远程存储库读取”。

    我开始学习 Git 和 GitHub 现在 我可以创建我的存储库来练习 并且可以将提交推送到 git bash 上的原始存储库 在 GitHub 中 但是当我尝试推送 Visual Studio Code 时 我收到了此错误 权限被拒绝 公
  • 如何将数据绑定到标头?

    我在操作栏中有一个带有侧面导航抽屉的主要活动 在 default screen xml 中指定如下 请注意 为简洁起见 省略了很多代码
  • 如何在 iframe 中使用 css 媒体查询?

    我有一个加载 iFrame fancybox 的页面 我的 CSS 媒体查询在父页面上工作正常 但是当在 iFrame 中调用内容时 媒体查询不起作用 iFrame 中的内容有自己的样式表 如何让媒体查询在 iFrame 中工作 仅供参考
  • 如何通过配置而不是模块引导程序附加事件侦听器?

    在 ZF3 中 您通常会附加事件侦听器MvcEvent在模块的 Module php 中 如下所示
  • jquery 1.4.2 中的更改破坏了代码?

    我在使用 jquery 1 3 的页面上有此代码 但现在在 jquery 1 4 2 中 它因语法错误 无法识别的表达式而中断 document ready function span name charge click function
  • 如何判断SQL查询类型是DML还是DDL?

    如何判断SQL查询类型是DDL还是DML 数据定义语言 DDL 语句用于定义数据库结构或模式 一些例子 CREATE 在数据库中创建对象 ALTER 更改数据库的结构 DROP 从数据库中删除对象 TRUNCATE 从表中删除所有记录 包括
  • QT qmysql 驱动未加载

    我知道这个论坛上已经有很多关于这个问题的主题 但我没有设法解决我的问题 我的配置如下 QT 版本 5 14 2 mscv2017 64 编译器 mscv amd64 我的问题是我的应用程序没有加载 libmysql dll 这是我所做的 我
  • 仅具有底部边框的输入文本字段

    如何设置文本样式input字段使其只有一个border bottom像这个 预期文本Input Field Use outline 0然后设置border bottom input outline 0 border width 0 0 2p
  • Pandas 变换方法执行缓慢

    我有一个规范的熊猫transform性能似乎莫名其妙地缓慢的示例 我已阅读问答apply method https stackoverflow com questions 54432583 when should i ever want t
  • 从 Fragment 调用 DialogFragment

    我正在尝试从 Fragment 类中调用 DialogFragment 我有一个 ImageView 并且想在我设置的 ImageView 的 onClickListener 中调用我的 DialogFragment 类 我在 onClic
  • 如何使用CGAffineTransform MakeRotation?

    我想使用 Quartz 2D 绘制文本 菜单 方向错误 我希望 菜单 仍然可读并且与 X 轴成 45 度 下面是我的代码 CGContextSelectFont context Arial 12 kCGEncodingMacRoman CG
  • 如何将 YAML 文件解析/读取为 Python 对象?

    如何将 YAML 文件解析 读取为 Python 对象 例如 这个 YAML Person name XYZ 对于这个 Python 类 class Person yaml YAMLObject yaml tag Person def in
  • 如何让jquery移动控件组宽度为100%?

    我正在使用 jquery mobile 来做演示 我想让本地导航的宽度为 100 但我不知道该怎么做 代码在这里 ul class localnav li a href class ui btn active 111 a li li a h
  • 避免重复

    如何避免字符串中的重复项 在 C 中 例如 我有 a a b b c 我想得到像 a b c 这样的答案 通过使用HashSet
  • 为所有用户安装可选的桌面快捷方式

    我想做一个wix安装程序 带有optional所有用户的桌面快捷方式 可选的意思 我不能把它放在component主exe的 但在一个单独的component 这样我就可以设置一个单独的feature为快捷方式 当这样做时 wix 抱怨道
  • 避免注册表 php 中的 SQL 注入

    我的本地主机上有一个简单的注册表单 仍在测试 我想知道它是否会受到 SQL 注入攻击 Code name mysql real escape string POST name password mysql real escape strin
  • 如何在 Blazor 服务器应用程序中以编程方式注销(身份)

    在我的代码中 我处理 DbUpdateConcurrencyException 对于更新用户帐户的情况 并且用户不再存在 我想将他们注销 因为他们不再是有效用户 当然 这不是什么大问题 因为这种情况应该很少见 他们尝试访问的任何页面都不会接