Wir verwenden die folgende Art und Weise mit unserer Benutzerauthentifizierung auf MVC 5: Wo Benutzer unsere Tabelle mit Benutzern sind
private User user;
public User User
{
get
{
return user;
}
set
{
user = value;
}
}
so können Sie diesen einen haben auch
public User Impersonator
{
get
{
return user;
}
set
{
user = value;
}
}
so in unser Controller haben wir dies zur Authentifizierung des Benutzers
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");
}
}
und dann in y unsere Erfolgsmethode
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");
}
}
Welche Art von Authentifizierung verwenden Sie? –
Authentifizierung mit Standardformularen, die mit MVC –
Okey geliefert wird. Das kommt mir in den Sinn, ich könnte mich irren. Wenn Sie sich authentifizieren, erstellen Sie ein Cookie auf dem Benutzer-PC. Wenn Sie einen anderen Benutzer "imitieren", schreiben Sie zusätzliche Informationen zu diesem Cookie. Wenn Sie diesen Cookie in Ihrer Anwendung lesen, überprüfen Sie zunächst dieses zusätzliche Feld (dies könnte der Benutzername eines anderen Benutzers sein). Wenn es vorhanden ist, können Sie das HtppContext-Objekt mit anderen Benutzerinformationen füllen. Auf diese Weise können Sie die Site als anderen Benutzer anzeigen. Wie ich jedoch gesagt habe, bin ich mir nicht sicher, ob das funktioniert. Oder sogar sicher. –