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

时间:2018-08-01 18:29:36

标签: asp.net-core asp.net-core-identity

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

我会实现自定义SignInManager,但是PasswordSignInAsync仍会返回具体的SignInResult,并且不确定是否可以在此处加入其他所需状态。

1 个答案:

答案 0 :(得分:1)

是的,您将不能仅覆盖PasswordSignInAsync,但是您可以创建一个新方法来返回自定义结果类,然后将实际登录部分移交给{{1} }。

但是,等到完成创建带有自定义方法和状态的派生类型并引导所有内容时,在登录后仅从用户读取值并做出相应的反应可能更简单明了。例如,您可以(可能应该)将EULA接受设置为对用户的声明。然后,您可以执行以下操作:

PasswordSignInAsync

更好的是,您可以创建一个自定义操作过滤器,以检查用户是否已通过身份验证,如果通过了验证,则检查用户是否具有声明。如果不是,那么您将重定向到您的EULA接受页面。然后,可以在// sign in user if (User.FindFirstValue("eula") == null) { return Redirect("/eula"); } 中将该动作过滤器设为全局过滤器,而您甚至不需要考虑它。