Как я могу сохранить что-то с помощью FormsAuthentication? Я не хочу хранить UserId через URL.
Например, теперь у меня есть этот код:
//UserController class:
[HttpPost]
public ActionResult LogOn(LogOnModel model, string returnUrl)
{
if (ModelState.IsValid)
{
if (repository.ValidateUser(model.Login, model.Password))
{
FormsAuthentication.SetAuthCookie(model.Login, model.RememberMe);
if (Url.IsLocalUrl(returnUrl))
{
return Redirect(returnUrl);
}
else
{
return RedirectToAction("Project", "Index");
}
}
else
{
ModelState.AddModelError("", "Incorrect name or password.");
}
}
return View(model);
}
ProjectController
класс:
public ViewResult Index()
{
return View(repository.GetUserProjects(
this.ControllerContext.HttpContext.User.Identity.Name));
}
ProjectRepository
:
ProjectsContext context = new ProjectsContext();
UsersContext uCnt = new UsersContext();
public IEnumerable<Project> GetUserProjects(String username)
{
if (String.IsNullOrEmpty(username))
throw new ArgumentNullException("username", "Login is empty");
return this.uCnt.Users
.FirstOrDefault(u => u.Login == username)
.Projects
.ToList();
}
ProjectController и ProjectRepository не похожи на хороший код... Может быть, кто-то может дать совет, как хранить UserID без использования URL? Лучший способ сделать это - сохранить идентификаторы при авторизации, я думаю. Я не нашел никаких свойств в User.Identity, чтобы сделать это...
UPD
Прошу прощения, но я забыл сказать, что использую MVC-3 с видом Razor. И этот UserId не является строкой (User.Identity.Name - это строка), это может быть GUID или, может быть, мой собственный объект...