हम 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");
}
}
आप किस प्रकार का प्रमाणीकरण उपयोग कर रहे हैं? –
मानक रूप प्रमाणीकरण जो एमवीसी –
ओके के साथ आता है। यह मेरे दिमाग में आता है, मैं गलत हो सकता है। जब आप प्रमाणित करते हैं तो आप उपयोगकर्ता पीसी पर कुकी बनाते हैं। यदि आप किसी अन्य उपयोगकर्ता का "प्रतिरूपण" करते हैं, तो इस कुकी को अतिरिक्त जानकारी लिखें। जब आप अपने कुकी पर इस कुकी को पढ़ते हैं तो पहले इस अतिरिक्त फ़ील्ड की जांच करें (यह अन्य उपयोगकर्ता का उपयोगकर्ता नाम हो सकता है)। यदि यह मौजूद है तो आप अन्य उपयोगकर्ताओं की जानकारी के साथ HtppContext ऑब्जेक्ट भर सकते हैं। इस तरह आप साइट को अन्य उपयोगकर्ता के रूप में देख सकते हैं। हालांकि, जैसा कि मैंने बताया, मुझे यकीन नहीं है कि यह काम करता है या नहीं। या यहां तक कि सुरक्षित भी। –