gpt4 book ai didi

authentication - 加载任何网页时强制用户更改密码

转载 作者:行者123 更新时间:2023-11-30 18:11:35 25 4
gpt4 key购买 nike

我使用的是 ASP.net core 2.0。我在我的 AspNetUsers 表和我的 ApplicationUser 类中添加了一个名为 IsChangePassword 的标志列。这个想法是强制用户更改他们的密码。他们总是有可能输入一个 url 来绕过被迫更改密码。我想让它在每次加载网页时检查该属性,如果该标志为真,则重定向到 ChangePassword。

最佳答案

您需要一个资源过滤器,您需要将其与 UserManager<TUser> 一起注入(inject)和 IUrlHelperFactory .前者显然将用于检查 IsChangePassword 的值,而后者将需要根据您选择的重定向 URL 检查当前 URL,以防止无休止的重定向循环。简单地:

public class ChangePasswordResourceFilter : IAsyncResourceFilter
{
private readonly UserManager<ApplicationUser> _userManager;
private readonly IUrlHelperFactory _urlHelperFactory;

public ChangePasswordResourceFilter(UserManager<ApplicationUser> userManager, IUrlHelperFactory urlHelperFactory)
{
_userManager = userManager;
_urlHelperFactory = urlHelperFactory;
}

public async Task OnResourceExecutionAsync(ResourceExecutingContext context, ResourceExecutionDelegate next)
{
var urlHelper = _urlHelperFactory.GetUrlHelper(context);
var redirectUrl = urlHelper.Page("~/PasswordChange");
var currentUrl = context.HttpContext.Request.Path;

if (redirectUrl != currentUrl)
{
var user = await _userManager.GetUserAsync(context.HttpContext.User);
if (user?.IsChangePassword ?? false)
{
context.Result = new RedirectResult(redirectUrl);
}
}

await next();
}
}

然后,在Startup.ConfigureServices :

services.AddScoped<ChangePasswordResourceFilter>();

...

services.AddMvc(o =>
{
o.Filters.Add(typeof(ChangePasswordResourceFilter));
});

关于authentication - 加载任何网页时强制用户更改密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57655358/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com