我正在为我的asp.net项目创建自定义成员资格类。在MembershipProvider类中,用户验证的功能定义如下。
public abstract bool ValidateUser(string username, string password);
问题是验证可能因为几个原因而失败,所以我想提供更详细的说明,说明为什么登录失败(例如,用户被锁定等),但这不能通过bool返回类型完成。我当然可以创建我的验证方法之一,如下所示
public RichStatusDetailsEnum ValidateUser(string username, string password);
上面的问题是我无法以通用方式调用此方法(仅限于Membership.ValidateUser)。相反,我将不得不实例化我的自定义成员资格提供者等的对象。是否有其他人遇到过相同的问题,是否有更好的方法来处理这种情况?
答案 0 :(得分:3)
根据this MSDN resource,返回将告诉您它是否有效。只有两个参数(用户名和密码)。如果它是false
返回,那么您知道其中一个已关闭。您始终可以通过致电Membership.GetUser()来测试UserName
是否正确。如果返回的MembershipUser
对象不为null,则表示UserName
是正确的。在这种情况下,这会让您相信如果ValidateUser()
失败,则表示密码错误。
要查看用户是否已被锁定:对于从MembershipUser
返回的GetUser()
对象,您可以测试该用户是否被该属性锁定{ {1}}。
答案 1 :(得分:2)
完成此任务的一种方法是
HttpContext.Current.Items
集合ValidateUser
失败,请获取数据并执行某些操作(例如向ModelState.AddModelError("Property","Message");
添加错误public override bool ValidateUser(string username, string password)
{
// your custom logic goes here
HttpContext.Current.Items["ValidateUserResult"] = ValidateUserFailed.UserNameWasWrong;
return false;
}
public enum ValidateUserFailed
{
UserNameWasWrong, PasswordWasWrong, BecauseIDontLikeYou
}
你的其他班级