gpt4 book ai didi

c# - 登录控制和自定义成员(member)提供者

转载 作者:太空狗 更新时间:2023-10-29 21:30:48 25 4
gpt4 key购买 nike

我正在努力实现一个自定义成员资格提供程序,它针对我数据库中的现有模式工作,并且有一些想法/问题。

登录控件将自动调用成员资格提供程序的 ValidateUser 方法,因此无论我如何实现提供程序,登录控件唯一关心的是此方法返回的 bool 值。我感到困惑的是,登录尝试失败的原因可能有很多;用户被锁定,一段时间内尝试次数太多,等等。我认为无法将其传达给控件,以便它可以显示正确的消息。成员提供者的其他属性,如 PasswordStrengthRegularExpression 对登录控件也完全没有影响(开箱即用),我希望它能以某种方式自动转换为正则表达式验证器,但这似乎不是案件。因此,如果我希望登录控件属性自己接受控件,我似乎需要使用提供程序配置中的这些设置来初始化登录控件属性。

如果登录控件开箱即用(无需手动处理事件和执行上述初始化)的唯一事情是调用成员资格提供程序上的 ValidateUser 方法,我看不出有什么方法可以传回给登录控件为什么验证失败,甚至做一些事情,比如根据特定时间窗口限制验证请求。最终我的问题是,为什么我还要将成员(member)提供程序与登录控件结合使用?它似乎只是为 Yes/No 类型的响应而设计的,这是非常有限制的。如果我想在逻辑中构建不同的消息返回给用户,我需要处理登录控件事件并调用我自己的身份验证类来处理我的所有业务需求,并将自定义错误消息返回给登录控件以向用户显示,以便他们知道为什么他们的尝试无效。

除非我的假设有误,否则作为成员资格 API 的登录控件之间的接口(interface)似乎限制太多而无用。也许 API 对于 ChangePassword 等其他身份验证控件效果更好,但对于实际的登录控件,我不明白这一点。

我很欣赏你的想法。

最佳答案

你是对的。要实现您正在谈论的逻辑,您需要实现 Authenticate 事件。这样您就可以在进行自己的验证后写回自定义错误消息。

另一方面,我认为密码强度不应该在身份验证时验证,而是在用户创建时验证。

你可以这样写:

protected void Login_Authenticate(object sender, AuthenticateEventArgs e)
{
try
{
e.Authenticated = myMembershipProvider.ValidateUser(LoginControl1.UserName,LoginControl.Password);

}
catch(Exception ex)
{
LoginControl1.FailrureText = ex.Message;
}
}

并在您的 ValidateUser 方法中抛出您的自定义异常。快乐编码...

关于c# - 登录控制和自定义成员(member)提供者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3909389/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com