0

I am using asp.net memebership

I log out the applcation by writting this code for log out

if (Membership.GetUser(HttpContext.Current.User.Identity).IsOnline) ;
{
    FormsAuthentication.SignOut();

    Response.Redirect(FormsAuthentication.LoginUrl);
}
Response.Redirect("loginpage.aspx");

After then I started the application and gettig the error in code block of authetication .below I am writtng a code and error message

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;
}

here Membership.FindUsersByName(User.Identity.Name)).IsOnline==true) I am getting this error

[ArgumentException: The provider user key supplied is invalid. It must be of type System.Guid. Parameter name: providerUserKey]

I am unable to find what to do , I debug the application and found User.Identity.Name as a 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
4

2 に答える 2

1

または、ユーザー オブジェクト全体を取得せず、認証のみをチェックする Request.IsAuthenticated を使用することもできます。

于 2013-04-03T04:09:25.353 に答える
0

Visual Studioによると、Membership.FindUsersByNameはMembershipUserCollectionを返します。そのオブジェクトをMembership.GetUserメソッドに渡します。このメソッドは、オブジェクトタイプのパラメーターを受け入れますが、そのオブジェクトはユーザーのID(ASP.NETのGUID)であると想定されています。したがって、例外はかなり予想されます。メソッドが単一のユーザーIDを期待しているのに、ユーザーのコレクションを渡そうとしているのです。

ユーザーが現在ログインしているかどうかを確認する必要がある場合は、次のようにするだけです。

if (Membership.GetUser() != null)

メソッドの詳細については、このMSDNライブラリの記事を参照してください。

于 2012-06-08T07:48:15.013 に答える