ProviderUserKey返回错误的密钥

时间:2013-02-10 13:59:50

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

我正在尝试以下代码

ASPX:

Username: <br />
<asp:TextBox runat="server" ID="txtUserName"></asp:TextBox>
<br />
Password: <br />
<asp:TextBox runat="server" ID="txtPassword" TextMode="Password"></asp:TextBox>
<br />
<asp:Button runat="server" ID="btnLogin" Text="Login" onclick="btnLogin_Click"/>
代码背后的代码:

protected void btnLogin_Click(object sender, EventArgs e)
{
    if(!string.IsNullOrEmpty(txtUserName.Text.Trim()) && !string.IsNullOrEmpty(txtPassword.Text.Trim()))
    {
        string username = txtUserName.Text.Trim();
        string password = txtPassword.Text.Trim();
        if (Membership.ValidateUser(username, password))
        {
            MembershipUser user = Membership.GetUser(username);
            string userid = user.ProviderUserKey.ToString();
        }
 }

我在userid中获得的值与我在数据库中的值不同。我究竟做错了什么。我试过MembershipUser user = Membership.GetUser()但它返回null

注意: 我正在使用配置了asp.net成员资格的Oracle。

修改 用户名在数据库中:161863BC7C244AADBF27F5F6250AF99C

userid var中的用户ID:bc631816-247c-ad4a-bf27-f5f6250af99c

1 个答案:

答案 0 :(得分:2)

正如我在评论中提到的,似乎Oracle以不同的顺序存储用户guid。如果你真的想在数据库中获得相同的guid,你需要一个解决方法。检查this code project article。作者使用了一种方法来翻译guid:

public static string TranslateOraceEndianUserID() 
    { 
        MembershipUser myObject = Membership.GetUser(); 
        Guid g = new Guid(myObject.ProviderUserKey.ToString()); 
        byte[] b = g.ToByteArray(); 
        string UserID = BitConverter.ToString(b, 0).Replace("-", string.Empty); 
        return UserID; 
    } 

但这是未经测试的。作者说

  

创建了以下方法,解决了我的问题