【问题标题】:Extend/Customize ValidateUser of MembershipProvider扩展/自定义 MembershipProvider 的 ValidateUser
【发布时间】:2014-02-25 17:41:51
【问题描述】:

我正在实施MembershipProvider 课程。大部分方法都没有实现,我把NotImplementedException扔进去了。

但正在使用 ValidateUser:

public override bool ValidateUser(string UserName, string Password)

现在我想要为它添加更多参数。像这样的东西可以解决问题:

public override bool ValidateUser
    (
        string UserName,
        string Password,
        string IpAddress,
        string BrowserName
    )

这是一个例子。一旦我可以添加更多参数,我可以将它们组合到一个对象中,然后调用数据库层。

我搜索了很多,但找不到有效的方法。有人说不能,有人说可以。

感谢您的帮助。

【问题讨论】:

  • 你不能像那样注入那些参数。你可以做的是使用HttpContext.Current,但它是一个非常笨拙的实现。
  • 谢谢阿伦。我把所有的参数都作为 XML 字符串,稍后再解析。

标签: c# asp.net .net asp.net-membership membership-provider


【解决方案1】:

实现自定义成员资格提供程序意味着您要覆盖成员资格提供程序的方法。

尽管您可以随意在自定义成员资格提供程序中创建自己的方法,但您将无法调用它。

如果您只需要 IpAddressBrowser,您可以在 ValidateUser 中使用 HttpContext.Current.Request`方法。

public override bool ValidateUser(string username, string password)
{
   string ipAddress = HttpContext.Current.Request.UserHostAddress;
   string browser = HttpContext.Current.Request.Browser.Version;

   // Do something
}

【讨论】:

    【解决方案2】:

    谢谢胜利。除了 IP 和浏览器信息之外,我还需要一些其他参数。

    我最终将所有内容(UserNamePassword、附加参数)放入 XML 并作为用户名发送。然后在password,我有一个标志,它看起来是否应该做一些不同的事情。

    public override bool ValidateUser(string username, string password)
    {
        if (password == "XML")
        {
            // This contains additional information in username.
            DatabaseLayerObject.ValidateUser(username);
        }
        else
        {
            // This is conventional call.
            DatabaseLayerObject.ValidateUser(username, password);
        }
    }
    

    更新 1:

    我正在添加更多信息以澄清我的回复。

    当我想发送除了usernamepassword之外的更多信息时,我会将它们全部放在XML中,并将这些信息存储在username中。例如:

    <UserName>MyUserName</UserName>
    <Password>MyPassword</Password>
    <City>NameOfCity</City>
    <Country>NameOfCountry</Country>
    

    现在我需要ValidateUser 方法中的一些指示来了解我是否正在发送 XML。此标志位于password 中,存储为我选择的任何字符串。

    【讨论】:

    • 抱歉,我对您打算如何使用此方法感到困惑。内部?你如何确保密码是“XML”?
    • @SBirthare:我已经更新了我的回复。我希望这能消除混乱。如果没有,请告诉我。
    • 法尔汉。谢谢/
    猜你喜欢
    • 2011-08-14
    • 1970-01-01
    • 2011-03-30
    • 1970-01-01
    • 1970-01-01
    • 2011-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多