Asp.net MVC4-用户模拟
我在MVC4应用程序中有一个需求,但我在任何地方都没有成功地找到太多信息 我需要能够“模拟”另一个注册用户。通常,这将是一个客户服务用户能够“模拟”系统中的另一个用户 这不是windows身份模拟 我不需要有关安全性或权限的帮助,只需要能够登录并选择其他用户作为用户在网站上冲浪 想法Asp.net MVC4-用户模拟,asp.net,asp.net-mvc-4,Asp.net,Asp.net Mvc 4,我在MVC4应用程序中有一个需求,但我在任何地方都没有成功地找到太多信息 我需要能够“模拟”另一个注册用户。通常,这将是一个客户服务用户能够“模拟”系统中的另一个用户 这不是windows身份模拟 我不需要有关安全性或权限的帮助,只需要能够登录并选择其他用户作为用户在网站上冲浪 想法 提前感谢。我们在MVC 5上使用以下方式进行用户身份验证: 其中User是我们的表,用户位于 private User user; public User User { get
提前感谢。我们在MVC 5上使用以下方式进行用户身份验证: 其中User是我们的表,用户位于
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");
}
}
然后在你的成功方法
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");
}
}
您使用的是哪种身份验证?MVCOkey附带的标准表单身份验证。这就是我想到的,我可能错了。进行身份验证时,您在用户pc上创建cookie。如果您“模拟”另一个用户,请将其他信息写入此cookie。当您在应用程序上读取此cookie时,首先检查此附加字段(这可能是其他用户的用户名)。如果存在,您可以用其他用户信息填充HtppContext对象。这样,您可以作为其他用户查看站点。然而,正如我所说,我不确定这是否有效。甚至是安全的。