You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET Core 2.1 Identity as UI如何安全取消注册选项?

嘿,我来帮你把这个问题理清楚——直接移除页面上的Register按钮绝对不安全,懂吧?因为懂行的用户完全可以手动在地址栏敲入注册页面的路由(比如/Identity/Account/Register),直接绕过前端的隐藏操作;恶意用户甚至能通过API调用注册接口,照样能创建账号。

正确的禁用方案

我给你分两种场景说,你可以根据自己的需求选:

方案1:不用Scaffold,轻量拦截(适合不想动Identity源码的情况)

说白了就是从路由和配置层面堵死注册的入口:

  • 拦截注册路由:在Startup.cs的Configure方法里加个中间件,把所有访问注册页面的请求直接重定向到登录页:
app.Use(async (context, next) =>
{
    // 拦截注册和注册确认的路由
    if (context.Request.Path.StartsWithSegments("/Identity/Account/Register") || 
        context.Request.Path.StartsWithSegments("/Identity/Account/RegisterConfirmation"))
    {
        context.Response.Redirect("/Identity/Account/Login");
        return;
    }
    await next();
});
  • 隐藏前端入口:同时别忘了把_LoginPartial.cshtml里的Register链接删掉,这样普通用户连入口都看不到

方案2:Scaffold生成代码,彻底锁死(适合需要精细控制的场景)

如果你想连后端的注册逻辑都彻底关掉,那最好用Scaffold把Identity的Register相关代码生成出来:

  1. 在Visual Studio里右键项目→「添加」→「新建搭建基架项」→选「Identity」,然后勾选Register、RegisterConfirmation这些相关页面
  2. 生成代码后,打开Register.cshtml.cs,把OnPostAsync方法直接改成重定向或者返回错误:
public async Task<IActionResult> OnPostAsync(string returnUrl = null)
{
    returnUrl ??= Url.Content("~/");
    // 直接禁用注册,跳回登录页
    return LocalRedirect(returnUrl);
    // 要是想给用户提示,也可以这么写:
    // ModelState.AddModelError(string.Empty, "注册功能已禁用");
    // return Page();
}
  1. 最后可以把Register.cshtml里的表单删掉,改成提示“注册已禁用”的静态内容就行
关于SetPassword这类功能的处理

思路和禁用Register完全一样:

  • 先从路由层面拦截,防止用户直接访问对应的页面
  • 再把前端的入口链接删掉
  • 要是需要彻底禁用后端逻辑,就用Scaffold生成对应的页面代码,修改后端方法直接返回重定向或错误

内容的提问来源于stack exchange,提问作者kofifus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:35:30