[英]Using SignInManager in server-side Blazor
是否可以在没有HTTPContext
SignInManager
我正在制作一个 Blazor 服务器端应用程序,我需要让最终用户使用SignInManager
的PasswordSignInAsync()
方法登录。
如果有其他方法可以用 cookies 或其他方法来做,我也会接受,只要它们是“干净”的方法。
如果我还能得到有关如何为Startup.cs
配置解决方案的解释,那将是完美的。
我强烈建议您在应用程序中使用身份验证系统。 您不应该尝试创建任何身份验证系统。 这是免费的,只需几分钟即可完成设置。 不要浪费时间去做这么复杂的事情。 而是了解什么是 Blazor 授权组件以及如何在您的应用程序中使用它们。 他们都是伟大的。
注意:Blazor Server 与其客户端之间的通信是通过 SignaleR 完成的。 HttpContext 大部分时间都不可用。 不要尝试使用 HttpContext。 实际上,您不能,因为每当您尝试访问它时,它都是 null。
下面介绍如何使用身份 UI 创建 Blazor 服务器应用程序:
开始创建 Blazor 应用程序
在标题为 Create a new Blazor app 的 window 中执行以下操作:
Visual Studio 已为您创建了一个带有身份 UI 的 Blazor 服务器应用程序来验证您的用户。 请注意,Identity UI 实际上是与 Razor Pages 和 MVC 一起使用的 Razor Pages Identity UI。 如果您需要进行一些更改,您可以从这个系统中搭建一个或多个项目。 Go 到解决方案资源管理器并验证 Visual Studio 是否已添加名为 Areas 和 Data 的两个文件夹。 她还为您的 Startup class 配置了必要的服务来管理身份 UI。 您现在想要的是创建存储用户名、角色、声明等的数据库。 要创建数据库,您应该使用迁移。 这是一个链接,告诉您如何运行为您完成工作的命令。 现在您可以运行您的应用程序、注册到 web 站点、登录、注销等。
祝你好运。
要在服务器端 Blazor 中使用 SignInManager,
首先,将AddIdentity
注入Startup.cs
services.AddIdentity<IdentityUser, IdentityRole>(options => {
options.SignIn.RequireConfirmedAccount = false;
})
.AddEntityFrameworkStores<AppDBContext>()
.AddDefaultTokenProviders();
然后,将SignInManager
注入您的 razor 页面
@using Microsoft.AspNetCore.Identity
@inject SignInManager<IdentityUser> SignInManager
@inject NavigationManager navManager;
<!-- Put Login Form Here -->
@code{
protected async Task Submit()
{
var SignInResult= await SignInManager.PasswordSignInAsync("username", "password", true, lockoutOnFailure: false);
if (SignInResult.Succeeded)
{
navManager.NavigateTo("Home", false);
}
}
}
还有另一种方式没有人提到,所以我想我也可以:你可以使用中间件登录,因为中间件携带完整的 html 请求并可以修改它(例如,通过登录),然后它跟随管道到 Blazor 渲染. 我使用这种方法为我的游戏页面创建临时来宾用户——之所以有效,是因为来宾不需要输入和提交他们自己的明文密码。
确保登录安全的后勤工作可能并不比遵循@.net 的建议更容易,即使用内置脚手架身份验证系统,或使用 UserManager 登录并重新导航到您的页面。 但是,您可以使用模式框登录,而不必导航到 MVC 样式的登录页面。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.