.NET 5 Cookie 身份验证方案中未添加 Cookie
Cookie does not get added in .NET 5 Cookie Authentication Scheme
我正在学习 .net 5 中的身份验证和授权。这是我目前所掌握的:
"Login.cshtml":
@model LoginViewModel
@{
ViewData["Title"] = "Login";
}
<h1>Login</h1>
<form method="post">
<div class="form-group">
<div class="input-group align-content-center justify-content-center">
<div class="d-flex flex-column">
@Html.TextBoxFor(user => user.Email, new { @class = "form-control", @placeholder = "email" })
@Html.TextBoxFor(user => user.PasswordHash, new { @class = "form-control", @placeholder = "password", @type = "password" })
<input class="btn btn-primary" type="submit" value="Login" />
</div>
</div>
</div>
</form>
“动作控制器”:
[Route("/Login")]
public IActionResult Login()
{
return View();
}
[HttpPost]
[Route("/Login")]
public IActionResult Login([Bind] LoginViewModel model)
{
if (model.Email == "user@fmail.com" && model.PasswordHash == "1234")
{
var claims = new List<Claim>
{
new Claim(ClaimTypes.Name, "Bar F Har"),
new Claim(ClaimTypes.Email, "user@fmail.com"),
new Claim("Age", "25")
};
var claimsIdentity = new ClaimsIdentity(claims);
var claimsPrincipal = new ClaimsPrincipal(claimsIdentity);
HttpContext.SignInAsync(claimsPrincipal);
return Redirect("/"); // redirects to the page
}
else
{
return NotFound(); //works!!
}
}
我检查了调试器。唯一的问题似乎是没有添加 cookie:
services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme).AddCookie(options =>
{
options.Cookie.Name = "Test.Cookie";
options.LoginPath = "/Login";
});
app.Authentication();
和 app.Authorization();
已按 app.UseRouting();
之后的顺序正确放置
我错过了什么?
解决这个问题的方法非常简单:
将 HttpContext.SignInAsync(claimsPrincipal);
更改为 HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, claimsPrincipal);
就可以了。
我正在学习 .net 5 中的身份验证和授权。这是我目前所掌握的:
"Login.cshtml":
@model LoginViewModel
@{
ViewData["Title"] = "Login";
}
<h1>Login</h1>
<form method="post">
<div class="form-group">
<div class="input-group align-content-center justify-content-center">
<div class="d-flex flex-column">
@Html.TextBoxFor(user => user.Email, new { @class = "form-control", @placeholder = "email" })
@Html.TextBoxFor(user => user.PasswordHash, new { @class = "form-control", @placeholder = "password", @type = "password" })
<input class="btn btn-primary" type="submit" value="Login" />
</div>
</div>
</div>
</form>
“动作控制器”:
[Route("/Login")]
public IActionResult Login()
{
return View();
}
[HttpPost]
[Route("/Login")]
public IActionResult Login([Bind] LoginViewModel model)
{
if (model.Email == "user@fmail.com" && model.PasswordHash == "1234")
{
var claims = new List<Claim>
{
new Claim(ClaimTypes.Name, "Bar F Har"),
new Claim(ClaimTypes.Email, "user@fmail.com"),
new Claim("Age", "25")
};
var claimsIdentity = new ClaimsIdentity(claims);
var claimsPrincipal = new ClaimsPrincipal(claimsIdentity);
HttpContext.SignInAsync(claimsPrincipal);
return Redirect("/"); // redirects to the page
}
else
{
return NotFound(); //works!!
}
}
我检查了调试器。唯一的问题似乎是没有添加 cookie:
services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme).AddCookie(options =>
{
options.Cookie.Name = "Test.Cookie";
options.LoginPath = "/Login";
});
app.Authentication();
和 app.Authorization();
已按 app.UseRouting();
我错过了什么?
解决这个问题的方法非常简单:
将 HttpContext.SignInAsync(claimsPrincipal);
更改为 HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, claimsPrincipal);
就可以了。