我正在使用现有数据库开发 MVC 5 Web应用程序。该应用程序确实有两种类型的界面,一种仅用于注册用户,另一种仅用于管理员用户。
不幸的是,两种类型的用户都不存储在同一个User表中,而是存储在两个单独的表中,即tblUser和tblAdmin。这是一个继承的数据库,所以我无能为力。
我正在考虑创建两个MVC网站,一个用于注册用户,另一个用于管理员用户。我仍然可以这样做,但是,这意味着重复一些代码。
我想要做的另一个选择就是拥有一个MVC网站,并在其中创建一个区域,以安全地放置所有管理界面和代码。
然后,我将拥有两个帐户控制器(标准帐户控制器和管理员区域中的一个),每个帐户控制器都有自己的登录操作。
每个登录操作都会使用最新的 ASP.Net Identity 进行身份验证(即设置ClaimsIdentity,IAuthenticationManager等),类似这样的
private IAuthenticationManager AuthenticationManager
{
get
{
return HttpContext.GetOwinContext().Authentication;
}
}
public ActionResult Login(LoginViewModel model, string returnUrl)
{
if (ModelState.IsValid)
{
var user = _AccountService.VerifyUserLogin(model.UserName, model.Password);
if (user != null)
{
var identity = new ClaimsIdentity(new[] { new Claim(ClaimTypes.Name, model.UserName), }, DefaultAuthenticationTypes.ApplicationCookie, ClaimTypes.Name, ClaimTypes.Role);
//Add claim to store doctor ID, roles can also be added here if needed
identity.AddClaim(new Claim(ClaimTypes.NameIdentifier, Convert.ToString(user.userID)));
identity.AddClaim(new Claim(ClaimTypes.Role, "AddRoleHere"));
AuthenticationManager.SignIn(new AuthenticationProperties() { IsPersistent = model.RememberMe }, identity);
return RedirectToLocal(returnUrl);
}
else
{
ModelState.AddModelError("", "Invalid username or password.");
}
}
// If we got this far, something failed, redisplay form
return View(model);
}
我担心的是,如果我在两个登录操作中使用 AuthenticationManager.SignIn ,虽然它们是不同的操作,但这会导致问题,例如,共享正在设置的身份验证cookie,线程问题甚至是竞争条件。
我觉得我需要问这个问题,希望在继续这个应用程序之前得到一些回应。
我已经看过以前有这些问题的应用程序,不一定与身份验证有关,但我们只是说它让我非常谨慎,尤其是在涉及数据时。
对此的任何反馈或讨论都会很棒。
感谢。