2013-02-04 24 views
2

頂層函數返回一個成員資格用戶,而第二個函數不返回成員資格用戶。我已經傳遞給頂層函數獲取結果的用戶的用戶名,但第二個函數僅返回null。任何建議來獲取用戶的用戶名?Membership.Providers GetUser在使用用戶名時返回null

public static MembershipUser getCCUser(Guid UserID) 
{ 
    return ((MembershipProvider)Membership.Providers["CC_MembershipProvider"]).GetUser(UserID, false); 
} 

public static MembershipUser getCCUser(string userName) 
{ 
    return ((MembershipProvider)Membership.Providers["CC_MembershipProvider"]).GetUser(userName, false); 
} 
+0

mcfea看看這個鏈接的替代解決方案http://stackoverflow.com/questions/1001527/membership-getuserusername如何返回正確的框架 – MethodMan

+0

也請記住以下'Membership.GetUser()將只適用於經過身份驗證的用戶。否則,它將返回null。要驗證你正在處理經過驗證的請求調用「User.Identity.IsAuthenticated」在頁面上。' – MethodMan

+0

我想你可能會誤解這個特定的GetUser調用(即用userID或Username的參數以及它們是否爲布爾值在線或不)http://msdn.microsoft.com/en-us/library/77f10054(v = vs.100).aspx。它不需要有經過認證的用戶。儘管你對GetUser()是正確的。有趣的想法海報有關用戶名的情況。我會給它一個旋轉。 – mcfea

回答

4

applicationNames在web.config應aspnet_Applications匹配的應用程序名稱

+0

這比我的答案要好得多。至少更清楚。 – mcfea

0

好的。所以這只是一種可能的方式,但基本上我只是使用實體框架進行查找。我仍然樂於接受建議。

public static MembershipProvider CCMembershipProvider 
{ 
    get 
    { 
     return ((MembershipProvider)Membership.Providers["CC_MembershipProvider"]); 
    } 
} 

public static MembershipUser getCCUser(Guid UserID) 
{ 
    return CCMembershipProvider.GetUser(UserID, false); 
} 

public static MembershipUser getCCUser(string userName) 
{ 
    //This function is BS. For some reason userName always gets null. Unfortunately UsersInRole only gives a string[] 
    //Soo... Here is the jenky workaround... 
    userName = userName.ToLower(); 

    CCPortal.MEMBERSHIPEntities context = new CC.MEMBERSHIPEntities(); 

    CCPortal.aspnet_Users user = context.aspnet_Users.SingleOrDefault(u => u.LoweredUserName == userName); 

    return getCCUser(user.UserId); 
    //This is what We should be using.... 
    //return CCMembershipProvider.GetUser(userName, false); 
} 
2

我發現了真正導致問題的原因。最近我改變了應用程序名稱,以免與成員中的其他應用程序衝突。我已經忘記了我的web.config文件的成員部分更新應用程序名稱:

的Web.config(剪斷,爲了簡潔):

<membership> 
     <providers> 
     <clear/> 
     <add name="AA_MembershipProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="AA_MEMBERSHIP" applicationName="/"/> 
     <add name="CC_MembershipProvider" applicationName="/"/> 
     </providers> 
</membership> 

應改爲:

<membership> 
     <providers> 
     <clear/> 
     <add name="AA_MembershipProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="AA_MEMBERSHIP" applicationName="/"/> 
     <add name="CC_MembershipProvider" applicationName="CCPortal"/> 
     </providers> 
</membership> 

這裏有意思的是,我在使用基於Guid的用戶標識時找到了用戶,但是當根據字符串用戶名查找用戶時,成員資格需要具有正確的應用範圍。