簡體   English   中英

ASPNET成員資格提供程序中的問題

[英]Problems in aspnet membership provider

我正在使用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)我收到此錯誤

[ArgumentException:提供的提供者用戶密鑰無效。 它必須是System.Guid類型。 參數名稱:providerUserKey]

我找不到該做的事,我調試了該應用程序並找到了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.IsAuthenticated,哪個獲取整個用戶對象並僅檢查身份驗證。

根據Visual Studio,Membership.FindUsersByName返回MembershipUserCollection。 您將該對象傳遞給Membership.GetUser方法,該方法的確接受對象類型的參數,但是該對象應該是用戶的ID(ASP.NET中的GUID)。 因此,很可能會遇到例外情況:您正在嘗試傳遞一組用戶,而該方法只需要一個用戶ID。

如果您需要檢查用戶當前是否已登錄,則只需執行以下操作:

if (Membership.GetUser() != null)

有關方法的更多信息,請參見此MSDN庫文章。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM