我最近开始使用 ASP.NET 表单身份验证和成员身份。
我在 Visual Studio 中创建了一个 C# 项目,它会自动创建“/Account/Login.aspx”之类的页面。
然后我按照一个安装示例aspnet_*
表到我的 SQL Server 数据库,并且我已经能够使用<asp:CreateUserWizardStep>
控制创建用户。
然后我就能够以该用户身份登录,并且在调用时会显示登录的用户名<asp:LoginName>
但是,当我在按钮单击事件处理程序中的 C# 代码中调用以下代码时,我总是收到空引用异常:
string UserID = Membership.GetUser().ProviderUserKey.ToString();
这不应该返回UserID
来自我的 aspnet_users 表?
If <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;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)