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

使用CLI创建带身份验证的.NET 8 Blazor SSR项目的正确方法

为Blazor SSR应用添加身份验证的正确方法

你遇到的问题是因为.NET 8及以后版本的blazor模板(默认创建SSR项目)不支持--auth选项,这个选项仅适用于旧版的Blazor Server/WASM模板。下面是两种可行的解决方案:

方案一:创建新项目时直接集成身份验证

使用.NET 8引入的blazorwebapp模板(它默认包含SSR,同时支持WASM和静态渲染),这个模板支持--auth选项。执行以下命令:

dotnet new blazorwebapp --auth individual

该命令会直接生成一个带独立用户账户(Individual Accounts)身份验证的Blazor Web App项目,包含完整的登录、注册、密码重置等功能,且默认启用SSR。

方案二:给已有的Blazor SSR项目手动添加身份验证

如果已经有现成的Blazor SSR项目,按以下步骤手动集成:

  1. 安装必要的NuGet包
    在项目根目录执行以下命令:

    dotnet add package Microsoft.AspNetCore.Identity.EntityFrameworkCore
    dotnet add package Microsoft.EntityFrameworkCore.SqlServer  # 若使用其他数据库,替换对应provider包
    dotnet add package Microsoft.AspNetCore.Identity.UI
    
  2. 创建Identity DbContext
    在项目中新建一个类(比如AppDbContext.cs),继承IdentityDbContext:

    using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
    using Microsoft.EntityFrameworkCore;
    
    public class AppDbContext : IdentityDbContext<IdentityUser>
    {
        public AppDbContext(DbContextOptions<AppDbContext> options) : base(options) { }
    }
    
  3. 配置Program.cs
    添加DbContext和身份验证服务,并配置中间件(注意中间件顺序):

    var builder = WebApplication.CreateBuilder(args);
    
    // 配置DbContext(根据实际数据库调整)
    builder.Services.AddDbContext<AppDbContext>(options =>
        options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection")));
    
    // 添加身份验证服务
    builder.Services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true)
        .AddEntityFrameworkStores<AppDbContext>();
    
    // 添加Blazor相关服务
    builder.Services.AddRazorComponents()
        .AddInteractiveServerComponents();
    
    var app = builder.Build();
    
    if (!app.Environment.IsDevelopment())
    {
        app.UseExceptionHandler("/Error");
        app.UseHsts();
    }
    
    app.UseHttpsRedirection();
    app.UseStaticFiles();
    app.UseRouting();
    
    // 必须添加的身份验证、授权中间件(顺序不能错)
    app.UseAuthentication();
    app.UseAuthorization();
    
    app.MapRazorComponents<App>()
        .AddInteractiveServerRenderMode();
    
    app.Run();
    
  4. 配置数据库连接字符串
    在appsettings.json中添加连接字符串:

    "ConnectionStrings": {
        "DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=BlazorSSRIdentityDb;Trusted_Connection=True;MultipleActiveResultSets=true"
    }
    
  5. 生成身份验证页面
    先安装ASP.NET代码生成工具:

    dotnet tool install -g dotnet-aspnet-codegenerator
    

    然后生成登录、注册等核心页面:

    dotnet aspnet-codegenerator identity -dc AppDbContext --files "Account.Register;Account.Login;Account.Logout"
    

    (可按需添加更多页面,比如Account.ForgotPassword)

  6. 执行数据库迁移
    初始化身份验证相关的数据库表:

    dotnet ef migrations add InitialIdentitySetup
    dotnet ef database update
    
  7. 在Blazor组件中使用身份验证
    在需要授权的组件/页面上添加[Authorize]属性,或用AuthorizeView组件控制内容显示:

    @attribute [Authorize]
    
    <AuthorizeView>
        <Authorized>
            <p>当前登录用户:@context.User.Identity.Name</p>
            <a href="Identity/Account/Logout">退出登录</a>
        </Authorized>
        <NotAuthorized>
            <a href="Identity/Account/Login">登录</a> | <a href="Identity/Account/Register">注册</a>
        </NotAuthorized>
    </AuthorizeView>
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 10:43:19