【问题标题】:Membership.Providers GetUser returns null when using usernameMembership.Providers GetUser 在使用用户名时返回 null
【发布时间】:2013-02-04 04:59:22
【问题描述】:

第一个函数返回一个会员用户,而第二个函数没有。我已经为一个用户传递了用户名,top 函数为其获得了结果,但第二个函数只返回 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);
}

【问题讨论】:

  • mcfea 查看此链接以获取替代解决方案stackoverflow.com/questions/1001527/…
  • 还要记住以下Membership.GetUser() will only work for an authenticated user. Otherwise, it's going to return null. To verify you're dealing with an authenticated request call "User.Identity.IsAuthenticated" on the page.
  • 我想你可能误解了这个特殊的 GetUser 调用(即带有 userID 或 Username 的参数以及它们是否在线的布尔值)msdn.microsoft.com/en-us/library/77f10054(v=vs.100).aspx。它不需要经过身份验证的用户。不过,您对 GetUser() 是正确的。有趣的想法海报有关于用户名的情况。我会试一试。
  • 我将发布一个链接,您可以在其中阅读有关我在评论中找到的内容的更多信息。 stackoverflow.com/questions/6329181/…
  • 没有运气...感谢您的建议。

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


【解决方案1】:

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

【讨论】:

  • 这是一个比我更好的答案。至少更清楚。
【解决方案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 的用户 ID 时找到了用户,但在根据字符串 username 查找用户时,该成员资格需要具有正确的应用程序范围。

【讨论】:

    【解决方案3】:

    好的。所以这只是一种可能的方式,但基本上我只是使用实体框架进行了查找。我仍然愿意接受建议。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-10
      • 2021-03-24
      • 2016-08-05
      • 2021-02-20
      • 1970-01-01
      • 2018-08-12
      • 2018-04-23
      • 1970-01-01
      相关资源
      最近更新 更多