Asp.net core 将自定义签名结果添加到&x27;从SignInManager返回的<;TUser>;密码符号同步

Asp.net core 将自定义签名结果添加到&x27;从SignInManager返回的<;TUser>;密码符号同步,asp.net-core,asp.net-core-identity,Asp.net Core,Asp.net Core Identity,我想保证所有登录的用户都已经签署了我们的EULA,对我来说,这类似于内置的SignInResult.TwoFactorRequired,因为我想让他们在完成登录之前完成EULA签署过程。是否有人知道如何创建自定义的SignInResult,以便我的Identity server的所有用户在登录时都必须遵循相同的规则 我想实现一个自定义的SignInManager,但是PasswordSignInAsync仍然返回一个具体的SignInResult,我不确定是否可以在那里插入我想要的附加状态。是的

我想保证所有登录的用户都已经签署了我们的EULA,对我来说,这类似于内置的
SignInResult.TwoFactorRequired
,因为我想让他们在完成登录之前完成EULA签署过程。是否有人知道如何创建自定义的
SignInResult
,以便我的Identity server的所有用户在登录时都必须遵循相同的规则


我想实现一个自定义的
SignInManager
,但是
PasswordSignInAsync
仍然返回一个具体的
SignInResult
,我不确定是否可以在那里插入我想要的附加状态。

是的,你不能仅仅覆盖
PasswordSignInAsync
,但您可以创建一个新方法,返回自定义结果类,并将实际的登录部分交给
PasswordSignInAsync

但是,当您完成创建派生类型、自定义方法和状态以及引导一切时,登录后从用户处读取值并做出相应反应可能会更简单、更直接。例如,您可以(也可能应该)将EULA接受设置为对用户的声明。然后,您可以执行以下操作:

// sign in user

if (User.FindFirstValue("eula") == null)
{
    return Redirect("/eula");
}

更好的是,您可以创建一个自定义操作筛选器,用于检查用户是否经过身份验证,如果是,则检查他们是否拥有声明。如果没有,则重定向到EULA接受页面。然后,该操作过滤器可以在
Startup.cs
中成为全局过滤器,您甚至不需要再考虑它。

我有点希望我可以做一些更神奇的事情,并与现有的登录基础设施相结合,但我想您对过滤器的建议就是我要做的。谢谢