繁体   English   中英

Membership.Providers GetUser在使用用户名时返回null

[英]Membership.Providers GetUser returns null when using username

最重要的功能是返回会员用户,而第二个功能则不。 我已经为顶级功能获得结果的用户传递了用户名,但第二个只返回了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);
}

在web.config中的applicationNames应与aspnet_Applications表中的应用程序名称

我发现了真正引起问题的原因。 最近我更改了应用程序名称,以免与成员资格中的其他应用程序冲突。 我忘了更新web.config文件的Membership部分中的应用程序名称:

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的用户ID时找到了用户,但是在根据字符串用户名查找用户时,成员资格必须具有正确的应用程序范围。

好。 因此,这只是一种可能的方式,但是基本上我只是使用Entity Framework进行了查找。 我仍然愿意接受建议。

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);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM