我确实检查了很多关于如何做到这一点的视频和教程,现在我对有多少种可能的选择来实现它感到非常困惑,但没有一个真正适合我。我只是想了解创建一个简单程序结构的最佳方法是什么,其中用户在登录管理页面后设置创建一个 cookie,该 cookie 可能在 10 分钟内过期,但可以在每次访问授权页面时刷新属性。顺便说一句,这还没有使用实体框架。 这几天我正在试验它,我确实尝试使用控制器创建cookie,这是调用控制器函数创建cookie并让它使用await HttpContext.SignOutAsync创建cookie的正确方法吗?否则,我愿意接受任何其他建议,但不会再次向我指出文档,因为我确实尝试从那里理解,但我只会越来越困惑。顺便说一句,我现在正在开发 Net 6.0。感谢任何人为我指出一些好的资源,以更好地理解这个过程。
正如上面所解释的,我确实检查了文档并尝试使用控制器方法,但我想知道我做得是否正确,或者是 Blazor 中管理用户授权和身份验证的更好方法吗?喜欢 ProtectedSessionStorage 吗?
您无法从 Blazor 服务器端会话设置 cookie。您无权访问 HttpContext,并且没有可用于在响应标头中返回 cookie 的传统请求/响应周期。
我成功的方法是以通常的 Blazor 方式设置登录表单。如果登录通过验证,那么我将重定向到可以访问 HttpContext 的传统 razor 页面(.cshtml 文件)。设置 cookie 后,我将重定向到登录后页面。
注销也可以采取同样的方法。
以下是该过程的基本概述。
<Blazor>
@page "/login"
- Render login form
- Validate user input
- Failure?
- Display error message
- Success?
- Navigate to /dologin
</Blazor>
<Razor>
@page "/dologin"
- validate request
- set auth cookie
- navigate to /post-login
</Razor>
<Blazor>
@page "/post-login"
- validate cookie
- continue session
- ...
- navigate to /logout
</Blazor>
<Razor>
@page "/logout"
- unset cookie
- navigate to post-logout page
</Razor>
<Blazor>
@page "/post-logout"
- continue session
</Blazor>
显然这是一个简化的表示,并且没有详细介绍登录/注销后重定向逻辑。它也不涵盖您用于身份验证管理的抽象。在我的项目中,我使用
SignInManager
中的 Microsoft.AspNetCore.Identity
,但这只是我对实现的选择,与我对工作流程的选择无关。