ASPNET 成员资格提供程序中的问题
本文关键字:程序 问题 成员 ASPNET | 更新日期: 2023-09-27 18:36:05
我正在使用 asp.net 记忆
我通过编写此代码注销应用程序
if (Membership.GetUser(HttpContext.Current.User.Identity).IsOnline) ;
{
FormsAuthentication.SignOut();
Response.Redirect(FormsAuthentication.LoginUrl);
}
Response.Redirect("loginpage.aspx");
之后,我启动了应用程序并在身份验证的代码块中获取错误.下面我正在编写代码和错误消息
else if (User.Identity.IsAuthenticated == true && Membership.GetUser( Membership.FindUsersByName(User.Identity.Name)).IsOnline==true)
{
FormsAuthentication.SignOut();
FormsAuthentication.RedirectToLoginPage();
MembershipUser currUser = null;
string gt = null;
if (HttpContext.Current.User != null)
{
currUser = Membership.GetUser(true);
gt = currUser.Email;
}
/// string temp = User.Identity.GetProfile().ID;
//string query = "Insert into user_tbl(MemberID)(" + temp + ")";
//Response.Redirect("UserPanel.aspx");
//return;
}
这里Membership.FindUsersByName(User.Identity.Name)).IsOnline==true)
我收到此错误
我[参数异常:提供的提供程序用户密钥无效。 它 必须是系统.Guid 类型。参数名称:提供程序用户密钥]
找不到该怎么做,我调试了应用程序,发现 User.Identity.Name 作为hash value
Stack Trace
Exception Details: System.ArgumentException: The provider user key supplied is invalid. It must be of type System.Guid.
Parameter name: providerUserKey
Source Error:
Line 86: }
Line 87:
Line 88: else if (User.Identity.IsAuthenticated == true && Membership.GetUser( Membership.FindUsersByName(User.Identity.Name)).IsOnline==true)
Line 89: {
Line 90:
Source File: d:'31 May 2012'Demo'LoginPage.aspx.cs Line: 88
Stack Trace:
[ArgumentException: The provider user key supplied is invalid. It must be of type System.Guid.
Parameter name: providerUserKey]
System.Web.Security.SqlMembershipProvider.GetUser(Object providerUserKey, Boolean userIsOnline) +2242996
System.Web.Security.Membership.GetUser(Object providerUserKey, Boolean userIsOnline) +40
System.Web.Security.Membership.GetUser(Object providerUserKey) +6
LoginPage.Page_Load(Object sender, EventArgs e) in d:'31 May 2012'Demo'LoginPage.aspx.cs:88
System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +15
System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +36
System.Web.UI.Control.OnLoad(EventArgs e) +92
System.Web.UI.Control.LoadRecursive() +54
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +772
或者你也可以使用 Request.IsAuthentication,它获取整个用户对象并只检查身份验证。
根据
Visual Studio,Member.FindUsersByName返回MemberUserCollection。将该对象传递给 Member.GetUser 方法,该方法接受对象类型的参数,但该对象应该是用户的 ID(ASP.NET 中的 GUID)。因此,异常是意料之中的:您正在尝试传递用户集合,而该方法需要单个用户 ID。
如果您需要检查用户当前是否登录,只需执行以下操作:
if (Membership.GetUser() != null)
有关该方法的详细信息,请参阅此 MSDN 库文章。