将自定义 SignInResults 添加到从 SignInManager<TUser> PasswordSignInAsync 返回的内容

Adding Custom SignInResults to what's returned from a SignInManager<TUser> PasswordSignInAsync

我想保证所有登录的用户都签署了我们的 EULA,对我来说,它类似于内置的 SignInResult.TwoFactorRequired,因为我想让他们通过EULA 签署过程在完成他们的登录之前。有谁知道任何显示如何创建自定义 SignInResult 的资源,以便我的身份服务器的所有用户都必须在登录时遵循相同的规则?

我会实施自定义 SignInManager,但 PasswordSignInAsync 仍然 returns 具体 SignInResult 我不确定是否可以加入我的额外内容那里有理想的状态。

是的,您不能只覆盖 PasswordSignInAsync,但您可以创建一个新方法 returns 您的自定义结果 class 并且只需将PasswordSignInAsync.

的实际登录部分

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

// sign in user

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

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