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

问题描述 投票:1回答:1

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

我实施了一个自定义的SignInManager,但PasswordSignInAsync仍然返回一个具体的SignInResult,我不确定是否有可能在那里楔入我想要的额外状态。

asp.net-core asp.net-core-identity
1个回答
1
投票

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

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

// sign in user

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

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

© www.soinside.com 2019 - 2024. All rights reserved.