2009-08-11 52 views
3

我正在使用ASP.NET MVC 1.0以及Oracle ASP.NET成員資格提供程序。我遇到了一個區分大小寫的問題。User.Identity.Name套管問題

當用戶登錄到系統中,似乎成員提供商設置User.Identity.Name值,無論用戶在鍵入。也就是說,如果我創建的用戶爲Foo和用戶爲fOo登錄,然後到處都是,我在我的網站上使用User.Identity.Name,它會顯示fOo

有沒有簡單的方法來解決這個問題?我試圖

var user = Membership.GetUser(User.Identity.Name).UserName; 

但是,讓我完全一樣的fOo值。

+0

我覺得你剛剛發現了一個特定的提供者的實現細節cdmckay的解決方案。是關於我可以想出來。 – Ruben 2009-08-11 23:02:06

回答

1

作爲隨訪至cdmckay,如果你想擁有User.Identity.Name正確以及使用

IIdentity newIdentity = new GenericIdentity(properlyCasedUser.UserName); 
if (User is RolePrincipal) 
    User = new RolePrincipal(((RolePrincipal)User).ProviderName, newIdentity, ((RolePrincipal)User).ToEncryptedTicket()); 
else 
    User = new GenericPrincipal(newIdentity, null); 
+0

看起來很愚蠢,他們不只有'.UserName = Foo'和'.LoginUserName = fOo'或者其他的東西。 – cdmckay 2009-08-11 23:24:08

0

這裏有一個解決方案,我發現,但我覺得它應該比這個更直接:

MembershipUser user = _provider.GetUser(userName, false); 
MembershipUser properlyCasedUser = _provider.GetUser(user.ProviderUserKey, false);