استخدام Custom MembershipProvider دون التحكم في تسجيل الدخول في ASP.NET

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

  •  09-06-2019
  •  | 
  •  

سؤال

لقد حصلنا على العرف MembershipProvider في ASP.NET.يوجد الآن سيناريوهان محتملان يمكن التحقق من صحة المستخدم:

  1. تسجيل دخول المستخدم عبر login.aspx الصفحة عن طريق إدخال اسم المستخدم/كلمة المرور الخاصة به.لقد استخدمت التحكم في تسجيل الدخول وربطها مع MyMembershipProvider.هذا يعمل بشكل جيد تماما.

  2. يتم تمرير رمز المصادقة عبر بعض عناوين URL في سلسلة استعلام من مواقع ويب مختلفة.لهذا لدي حمل زائد واحد MembershipProvider.Validate(string authenticationToken), ، وهو في الواقع التحقق من صحة المستخدم.في هذه الحالة لا يمكننا استخدام التحكم في تسجيل الدخول.الآن كيف يمكنني استخدام نفسه MembershipProvider للتحقق من صحة المستخدم دون استخدام فعليًا التحكم في تسجيل الدخول؟حاولت الاتصال Validate يدويًا، ولكن هذا لا يؤدي إلى تسجيل دخول المستخدم.

إليك مقتطف الكود الذي أستخدمه

if (!string.IsNullOrEmpty(Request.QueryString["authenticationToken"])) {
    string ticket = Request.QueryString["authenticationToken"];
    MyMembershipProvider provider = Membership.Provider as MyMembershipProvider;
    if (provider != null) {
        if (provider.ValidateUser(ticket))
            // Login Success
        else
            // Login Fail
    }
}
هل كانت مفيدة؟

المحلول

بعد نجاح التحقق من الصحة، تحتاج إلى تسجيل دخول المستخدم، عن طريق الاتصال بـ FormsAuthentication.Authenticate: http://msdn.microsoft.com/en-us/library/system.web.security.formsauthentication.authenticate.aspx

يحرر:إنه FormsAuthentication.SetAuthCookie:http://msdn.microsoft.com/en-us/library/twk5762b.aspx

ولإعادة توجيه المستخدم مرة أخرى إلى المكان الذي يريد الذهاب إليه، اتصل أيضًا بـ:FormsAuthentication.RedirectFromLoginPage: http://msdn.microsoft.com/en-us/library/system.web.security.formsauthentication.redirectfromloginpage.aspx

نص الرابط

نصائح أخرى

يمكنك تعيين بنفسك FormsAuthenticationTicket إذا كان التحقق ناجحا.

شيء من هذا القبيل؛

if (provider != null) {
    if (provider.ValidateUser(ticket)) {
        // Login Success
        FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket(
            1, //version
            someUserName, //name
            DateTime.Now, //issue date
            DateTime.Now.AddMinutes(lengthOfSession), //expiration
            false, // persistence of login
            FormsAuthentication.FormsCookiePath
        );

        //encrypt the ticket
        string hash = FormsAuthentication.Encrypt(authTicket);
        HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, hash);

        Response.Cookies.Add(cookie);
        Response.Redirect(url where you want the user to land);
    } else {
        // Login Fail  
    }   
}

أنت على حق في حالة تخزين معلومات المصادقة كملف تعريف ارتباط مباشرة.ولكن باستخدام وظيفة تجزئة قوية (على سبيل المثال.MD5 + SHA1) رائع وآمن.بالمناسبة، إذا كنت تستخدم الجلسات (والتي هي أيضًا مجرد ملف تعريف ارتباط تجزئة)، فيمكنك إرفاق معلومات المصادقة بها.

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