我想保证我所有登录的用户都签署了我们的EULA,对我来说,这类似于内置的SignInResult.TwoFactorRequired
,因为我想让他们通过EULA签名在完成登录之前进行处理。是否有人知道显示如何创建自定义SignInResult
的资源,以便我的Identity Server的所有用户在登录时都必须遵循相同的规则?
我会实现自定义SignInManager
,但是PasswordSignInAsync
仍会返回具体的SignInResult
,并且不确定是否可以在此处加入其他所需状态。
答案 0 :(得分:1)
是的,您将不能仅覆盖PasswordSignInAsync
,但是您可以创建一个新方法来返回自定义结果类,然后将实际登录部分移交给{{1} }。
但是,等到完成创建带有自定义方法和状态的派生类型并引导所有内容时,在登录后仅从用户读取值并做出相应的反应可能更简单明了。例如,您可以(可能应该)将EULA接受设置为对用户的声明。然后,您可以执行以下操作:
PasswordSignInAsync
更好的是,您可以创建一个自定义操作过滤器,以检查用户是否已通过身份验证,如果通过了验证,则检查用户是否具有声明。如果不是,那么您将重定向到您的EULA接受页面。然后,可以在// sign in user
if (User.FindFirstValue("eula") == null)
{
return Redirect("/eula");
}
中将该动作过滤器设为全局过滤器,而您甚至不需要考虑它。