User.Identity.IsAuthenticated دائمًا خطأ عند النقر الأول؟[ينسخ]

StackOverflow https://stackoverflow.com//questions/22022595

  •  21-12-2019
  •  | 
  •  

سؤال

لدي تطبيق asp.net webforms الذي يحتوي على شاشة تسجيل دخول.عندما أنقر على زر تسجيل الدخول، يظهر User.Identity.IsAuthenticated يكون خطأً دائمًا عند النقرة الأولى.وهذا هو الكود الخاص بتسجيل الدخول:

protected void SignIn(object sender, EventArgs e)
    {
        var userStore = new UserStore<ApplicationUser>();
        var userManager = new UserManager<ApplicationUser>(userStore);
        var user = userManager.Find(UserName.Text, Password.Text);

        if (user != null && user.PasswordRetryCount < 3)
        {
            Session["UserName"] = user.UserName;

            var authenticationManager = HttpContext.Current.GetOwinContext().Authentication;
            var userIdentity = userManager.CreateIdentity(user, DefaultAuthenticationTypes.ApplicationCookie);

            authenticationManager.SignIn(new AuthenticationProperties {IsPersistent = false}, userIdentity);

            if (User.Identity.IsAuthenticated) //false on first click
                Response.Redirect("Default.aspx");
        }
    }
هل كانت مفيدة؟

المحلول 2

بدلاً من القيام بما يلي:

if (User.Identity.IsAuthenticated) للتحقق من مصادقة المستخدم، قمت بفحص الخاصية التالية لـ IdentityResult والذي يبدو أنه يعمل بشكل جيد:

if (userIdentity.IsAuthenticated)

نصائح أخرى

لقد قمت بتسجيل دخول المستخدم، ولكن الحدث (الأحداث) والقيم التي تحدد علامة IsAuthenticated لا تعمل حتى طلبك التالي.أنت لا تزال في سياق الطلب غير المصادق عليه.

ما هي قيمة الإرجاع ل authenticationManager.SignIn(..)؟إذا أعادت منطقيًا أو أي معلومات أخرى تخبرك ما إذا كنت قد قمت بالمصادقة بنجاح أم لا، فيمكنك استخدام ذلك كعلامة لـ if إفادة.

سيتم ملء الخاصية User.Identity.IsAuthenticated بناءً على ملفات تعريف الارتباط من HttpRequest في أحد أحداث مصادقة التطبيق.لذا، في حالتك، ستكون لهذه الخاصية قيمة "خاطئة".

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top