2013-06-29 13 views
9

मुझे एमवीसी 4 एप्लिकेशन में एक आवश्यकता है और मैं कहीं भी ज्यादा जानकारी खोजने में बहुत सफल नहीं रहा हूं।एमवीसी 4 - उपयोगकर्ता प्रतिरूपण

मुझे किसी अन्य पंजीकृत उपयोगकर्ता को "प्रतिरूपण" करने में सक्षम होना चाहिए। आम तौर पर, यह एक ग्राहक सेवा उपयोगकर्ता होगा जो सिस्टम में किसी अन्य उपयोगकर्ता को "प्रतिरूपण" करने में सक्षम है।

यह विंडोज पहचान प्रतिरूपण नहीं है।

मुझे लॉगिन करने की क्षमता के साथ सुरक्षा या अनुमतियों में सहायता की आवश्यकता नहीं है और फिर साइट को सर्फ करने के लिए किसी अन्य उपयोगकर्ता को चुनें।

विचार?

अग्रिम धन्यवाद।

+1

आप किस प्रकार का प्रमाणीकरण उपयोग कर रहे हैं? –

+0

मानक रूप प्रमाणीकरण जो एमवीसी –

+0

ओके के साथ आता है। यह मेरे दिमाग में आता है, मैं गलत हो सकता है। जब आप प्रमाणित करते हैं तो आप उपयोगकर्ता पीसी पर कुकी बनाते हैं। यदि आप किसी अन्य उपयोगकर्ता का "प्रतिरूपण" करते हैं, तो इस कुकी को अतिरिक्त जानकारी लिखें। जब आप अपने कुकी पर इस कुकी को पढ़ते हैं तो पहले इस अतिरिक्त फ़ील्ड की जांच करें (यह अन्य उपयोगकर्ता का उपयोगकर्ता नाम हो सकता है)। यदि यह मौजूद है तो आप अन्य उपयोगकर्ताओं की जानकारी के साथ HtppContext ऑब्जेक्ट भर सकते हैं। इस तरह आप साइट को अन्य उपयोगकर्ता के रूप में देख सकते हैं। हालांकि, जैसा कि मैंने बताया, मुझे यकीन नहीं है कि यह काम करता है या नहीं। या यहां तक ​​कि सुरक्षित भी। –

उत्तर

1

हम MVC 5 पर हमारे उपयोगकर्ता प्रमाणीकरण के साथ निम्नलिखित तरीके का उपयोग करें: कहाँ उपयोगकर्ता

private User user; 
public User User 
    { 
     get 
     { 
      return user; 
     } 
     set 
     { 
      user = value; 
     } 
    } 

में उपयोगकर्ताओं के साथ हमारे तालिका है, तो आप यह एक

public User Impersonator 
    { 
     get 
     { 
      return user; 
     } 
     set 
     { 
      user = value; 
     } 
    } 

तो में हो सकता है हमारे नियंत्रक के पास हमारे पास

public ActionResult Login() 
    { 
     try 
     { 
      Session.Clear(); 
      Settings.Current.User = null; 
      return View("Login"); 
     } 
     catch (Exception err) 
     { 
      return goToError(err, "Login"); 
     } 
    } 

[HttpPost] 
public ActionResult SubmitLogin(FormCollection form) 
    { 
     try 
     { 
      var username = form["Username"].ToLower().Trim(); 
      var password = form["Password"]; 

      if ((Settings.DB.Users.Any(o => o.UserName.ToLower().Trim() == username)) || ((Settings.DB.Users.Any(o => o.Email.ToLower().Trim() == username)))) 
      { 
       //User exists... 
       var user = Settings.DB.Users.FirstOrDefault(o => o.UserName.ToLower().Trim() == username || o.Email.ToLower().Trim() == username); 
            if ((user != null && user.Subscriber != null) && (
        (user.PasswordRetryCount >= subsriberSecurity.LockoutAttempts) || 
        (user.IsLockedOut) || 
        (!user.IsEnabled) || 
        (!user.Subscriber.IsEnabled) || 
        (!user.Subscriber.MVC5Flag))) 
       { 
        if (user.PasswordRetryCount >= subsriberSecurity.LockoutAttempts) 
        { 
         user.IsLockedOut = true; 
         Settings.DB.SaveChanges(); 
        } 

        ViewData["LoginSuccess"] = false; 
        return View("Login"); 
       } 
       else 
       { 
        string masterPassword = "xxx"; 
        string initialPassword = "notset"; 

        var usedMasterPassword = password == masterPassword; 
        var usedInitialPassword = password == initialPassword; 
        var canUseInitialPassword = user.Password == initialPassword; 
        var validPassword = user.Password == SecurityRoutines.GetPasswordHash(password, user.PasswordSalt.Value); 

        if ((validPassword) || (usedMasterPassword)) 
        { 
         return successLogin(user.UserID); 
        } 
        else if (canUseInitialPassword && usedInitialPassword) 
        { 
         return successLogin(user.UserID); 
        } 
        else 
        { 
         user.PasswordRetryCount++; //Increment retry count; 
         Settings.DB.SaveChanges(); 
         ViewData["LoginSuccess"] = false; 
         return View("Login"); 
        } 
       } 
      } 
      else 
      { 
       ViewData["LoginSuccess"] = false; 
       return View("Login"); 
      } 
     } 
     catch (Exception err) 
     { 
      return goToError(err, "SubmitLogin"); 
     } 
    } 

और फिर y में प्रमाणीकृत करने के लिए यह है हमारी सफलता विधि

private ActionResult successLogin(int userID) 
    { 
     var user = Settings.DB.Users.FirstOrDefault(o => o.UserID == userID); 

     var userImposter = Settings.DB.Users.FirstOrDefault(o => o.UserID == 1234); 
     user.PasswordRetryCount = 0; 

     user.LastLogin = DateTime.Now; 
     user.LoginCounter++; 

     if (user.Version != Settings.Current.ApplicationVersion) 
     { 
      user.Version = Settings.Current.ApplicationVersion; 
     } 

     user.Submit(); 
     Settings.Current.User = user; 
     Settings.Current.Impersonator = userImposter; 
     FormsAuthentication.SetAuthCookie(userImposter.UserName, true); 
     verifyUserPreferences(); 

     if (user.Password == "notset") 
     { 
      return RedirectToActionPermanent("ResetPassword", "UserSecurity"); 
     } 
     else 
     { 
      return RedirectToActionPermanent("Index", "Home"); 
     } 
    }