Membership.GetUser().ProviderUserKey总是返回null

本文关键字:返回 null ProviderUserKey GetUser Membership | 更新日期: 2023-09-27 18:06:31

我最近开始使用ASP。. NET表单身份验证和成员资格。

我在Visual Studio中创建了一个c#项目,它自动创建了"/Account/Login.aspx"这样的页面。

然后我按照一个例子安装aspnet_*表到我的SQL Server数据库,我已经能够使用<asp:CreateUserWizardStep>控件来创建一个用户。

我已经能够作为这个用户登录,并且在调用<asp:LoginName>时出现登录的用户名

然而,当我在c#代码中调用以下代码时,在Button Click事件处理程序中,我总是得到一个空引用异常:

string UserID = Membership.GetUser().ProviderUserKey.ToString();

这不应该从我的aspnet_users表返回UserID吗?

如果<asp:LoginName>显示一个UserName值,我不应该总是能够调用Membership.GetUser().ProviderUserKey

Membership.GetUser().ProviderUserKey总是返回null

首先检查是否有一个有效的经过身份验证的用户id。从你的问题来看,你确实有。但是一系列的检查总是一个很好的做法。

我喜欢使用这两个方法(第二个调用第一个,但你也可以直接调用第一个。我建议调用第二个),它执行各种检查并返回用户ID,如果有用户未经过身份验证或身份不明,则返回null:

    public static MembershipUser GetCurrentUser()
    {
        HttpContext httpContext = HttpContext.Current;
        if (httpContext != null && httpContext.User != null && httpContext.User.Identity.IsAuthenticated)
        {
            return Membership.GetUser();
        }
        return null;
    }
    /// <summary>
    /// Safe check of authenticity. Better than Request.IsAuthenticated in that if there's a used-to-be-valid cookie which does not correspond to the current database, it will fail safe
    /// </summary>
    /// <returns></returns>
    public static bool IsUserAuthenticated()
    {
        if (HttpContext.Current == null)
            return false;
        var request = HttpContext.Current.Request;
        if (!request.IsAuthenticated)
            return false;
        var membershipUser = GetCurrentUser();
        if (membershipUser != null)
            return true;
        return false;
    }