使用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项目,按以下步骤手动集成:
安装必要的NuGet包
在项目根目录执行以下命令:dotnet add package Microsoft.AspNetCore.Identity.EntityFrameworkCore dotnet add package Microsoft.EntityFrameworkCore.SqlServer # 若使用其他数据库,替换对应provider包 dotnet add package Microsoft.AspNetCore.Identity.UI创建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) { } }配置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();配置数据库连接字符串
在appsettings.json中添加连接字符串:"ConnectionStrings": { "DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=BlazorSSRIdentityDb;Trusted_Connection=True;MultipleActiveResultSets=true" }生成身份验证页面
先安装ASP.NET代码生成工具:dotnet tool install -g dotnet-aspnet-codegenerator然后生成登录、注册等核心页面:
dotnet aspnet-codegenerator identity -dc AppDbContext --files "Account.Register;Account.Login;Account.Logout"(可按需添加更多页面,比如
Account.ForgotPassword)执行数据库迁移
初始化身份验证相关的数据库表:dotnet ef migrations add InitialIdentitySetup dotnet ef database update在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
相关产品推荐
相关产品推荐

