Asp.net MVC4-用户模拟

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

我在MVC4应用程序中有一个需求,但我在任何地方都没有成功地找到太多信息

我需要能够“模拟”另一个注册用户。通常,这将是一个客户服务用户能够“模拟”系统中的另一个用户

这不是windows身份模拟

我不需要有关安全性或权限的帮助,只需要能够登录并选择其他用户作为用户在网站上冲浪

想法


提前感谢。

我们在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对象。这样,您可以作为其他用户查看站点。然而,正如我所说,我不确定这是否有效。甚至是安全的。