1) пользователь открывает
login web page и в форме вводит login, password
2) Вызывается метод
Login в
AuthenticationController и внутри проверяем есть ли в базе данных такой
login и
password
Если
login и
password соответствует это значит настоящий пользователь и мы заполняем C# класс
ClaimsIdentity
Вот код программы:
C#
public class AuthenticationController : Controller
{
...
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Login(UserLoginViewModel model)
{
if (ModelState.IsValid)
{
User user = _myDbContext.Users.FirstOrDefault(u => u.LoginEmail == model.LoginEmail && u.Password == model.Password);
if (user != null)
{
// create Identity
ClaimsIdentity identity = new ClaimsIdentity("My");
// add Claims
identity.AddClaims(new List<Claim>
{
new Claim(ClaimTypes.Name, user.UserName),
new Claim(ClaimTypes.Email, user.LoginEmail)
});
// create Principal
ClaimsPrincipal principal = new ClaimsPrincipal(identity);
// set to cookie
HttpContext.SignInAsync(principal, new AuthenticationProperties { IsPersistent = true, ExpiresUtc = (DateTime.Now.AddHours(8)) });
// set identity to HttpContext.User (will use in HttpContext.User in any method in Controller)
HttpContext.User = new ClaimsPrincipal(identity);
// теперь в любом методе Contoller мы всегда получим HttpContext.User и на View отобразим соответствующую информацию о пользователе (залогинен или нет, графики таблицы будем рисовать в зависимоти от пользователя)
return RedirectToAction("Index", "Home");
}
ModelState.AddModelError("", "Error! User not exist with this email and password");
}
return View(model);
}
}
Смотреть всю программу на
GitHub.com:
WebCoreBookLibrary с использованием login/register/logout