繁体   English   中英

Membership.GetUser()。ProviderUserKey始终返回null

[英]Membership.GetUser().ProviderUserKey always returns null

我最近开始使用ASP.NET Forms Authentication和Membership。

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

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

我之后能够以此用户身份登录,并在调用<asp:LoginName>时显示登录的用户名

但是,当我在C#代码中调用以下内容时,在Button Click事件处理程序中,我总是得到一个Null引用异常:

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

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

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

首先检查您是否具有有效的经过身份验证的用户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;
    }

暂无
暂无

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

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