首页 > 解决方案 > 将自定义 SignInResults 添加到从 SignInManager 返回的内容中PasswordSignInAsync

问题描述

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

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

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

解决方案


是的,您不能只PasswordSignInAsync覆盖PasswordSignInAsync.

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

// sign in user

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

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


推荐阅读