提问人:bootsy 提问时间:7/1/2019 最后编辑:Martin Evansbootsy 更新时间:7/1/2019 访问量:1770
更改防伪印章
Change of Security Stamp
问:
更新用户密码时,我希望每次更新安全标记值。我相信这就是我的研究安全邮票的工作方式。
我把这段代码放在 但这不起作用:ApplicationUserManager.cs
private static string NewSecurityStamp()
{
return Guid.NewGuid().ToString();
}
每次对用户帐户进行更新时,我需要在何处更改安全标记值?
答:
2赞
Chris Pratt
7/1/2019
#1
这就是发生的事情。但是,安全标记仅在一段时间内(默认为每 30 分钟)重新验证一次,以减少正在进行的数据库查询次数。您可以将此间隔降低到零,这样可以有效地使标记在每次请求时重新验证。但是,这将增加来回到数据库的喋喋不休。
services.Configure<SecurityStampValidatorOptions>(o =>
{
// WARNING: this will issue a query for every request
// You might want to rather just compromise with an interval
// less than 30 minutes (5 minutes, 10 minutes, etc.)
o.ValidationInterval = TimeSpan.Zero;
});
另一种选择是在进行此类更改后直接注销用户。如果目标是简单地让他们重新登录,那应该会做得更好。只需注入 ,然后调用该实例即可。之后,您需要重定向用户。这可以直接转到登录页面或受保护的站点的某些区域,这将导致它们被带到登录页面进行身份验证。无论哪种情况,都需要重定向才能实际删除身份验证 cookie。SignInManager<TUser>
SignOutAsync
评论
0赞
bootsy
7/1/2019
嗨,克里斯。这在解决方案中处于什么位置?用户经理?启动?
0赞
Chris Pratt
7/1/2019
不好意思。那会进去.以为变量会传达这一点,但我应该更明确。Startup.ConfigureServices
services
0赞
bootsy
7/2/2019
我不认为这是行得通的。它仍然没有更新数据库中的字段。我更改了用户的密码,该用户的安全戳仍为 NULL。
评论
SecurityStamp
AspNetUser