我们设置了一个实现UserServiceBase的自定义用户服务,覆盖了一些方法(PreAuthenticateAsync,PostAuthenticateAsync等)。验证时会调用我们的PreAuthenticateAsync方法,但PostAuthenticateAsync方法永远不会被命中。
用户流程应使具有过期密码的人员重定向到重置页面。在用户身份建立后,PostAuthenticate似乎是处理此问题的最佳位置(我们可以在此处查看过期字段的自定义声明)。
该方法被覆盖[公共覆盖任务PostAuthenticateAsync(PostAuthenticationContext context)],但我无法弄清楚为什么它在登录后没有被击中。有没有人经历过这个或者可以想到任何原因为什么会发生这种情况?或者任何想法我应该研究一个更好的方法?谢谢!
以下是相关的代码部分:
public class MyAccountUserService : UserServiceBase
{
public override Task PreAuthenticateAsync(PreAuthenticationContext context)
{
var id = _owinContext.Request.Query.Get("signin");
context.AuthenticateResult = new AuthenticateResult("~/custom/login?id=" + id, (IEnumerable<Claim>)null);
return Task.FromResult(0);
}
public override Task PostAuthenticateAsync(PostAuthenticationContext context)
{
if (context.AuthenticateResult.User.Identity.GetIsExpiredPassword())
{
context.AuthenticateResult = new AuthenticateResult("/account/reset", (IEnumerable<Claim>)null);
return Task.FromResult(0);
}
else
{
return base.PostAuthenticateAsync(context);
}
}
}