我对 FormsAuthentication 的概念很陌生,并且正在努力解决一些问题。
我有一个 MVC4 项目 MyApp.Web,它有一个带有 Login 方法的 AccountController:
public ActionResult Login(LoginModel model, string returnUrl)
{
string siteName = ConfigurationManager.AppSettings["siteName"];
if (ModelState.IsValid && MembershipService.Login(model.UserName, model.Password, siteName))
{
return RedirectToAction("Main", "Home");
}
}
MembershipService 在另一个项目中(类库)
public bool Login(string username, string password, string site)
{
// ....
// do the validation, set up my ClaimsPrincipal and create a FormsAuthenticationTicket,
// which is stored in the Cookies collection
// now, we can save the ClaimsPrincipal to the relevant place
if (HttpContext.Current != null && HttpContext.Current.User != null)
HttpContext.Current.User = claimsPrincipal;
else if (Thread.CurrentPrincipal != null)
Thread.CurrentPrincipal = claimsPrincipal;
return success;
}
这一切似乎都很完美,我根据需要进行了验证,创建并存储了 ClaimsPrincipal。
我的问题是,当我被重定向到 MyApp.Web 时,回到 HomeController 并在 Main 方法中放置了一个断点, HttpContext.Current 与我在 Membership 项目中的断点不同;我在 Login 方法中设置的值都没有保留。
所以,简单地说,我如何确保它们是相同的,并且在一个项目中的 HttpContext.Current 上设置值会传递到我在同一解决方案中可能拥有的任何其他项目?
谢谢