添加 AuthCookie 后用户仍未通过身份验证
User still not authenticated after AuthCookie is added
我有一个非常正常的登录页面,只有用户名和密码字段:
<h2>Sign in</h2>
@Html.ValidationSummary()
@using (Html.BeginForm("SignIn"))
{
<p>
@Html.LabelFor(model => model.Username)
@Html.TextBoxFor(model => model.Username)
</p>
<p>
@Html.LabelFor(model => model.Password)
@Html.PasswordFor(model => model.Password)
</p>
<input type="submit" value="Submit"/>
}
我有一个登录操作定义如下:
[HttpPost]
[ActionName("SignIn")]
public ActionResult SignInConfirmation(UserCredentialsModel model)
{
if (ModelState.IsValid)
{
var userIsValid = Membership.ValidateUser(model.Username, model.Password);
if (userIsValid)
{
FormsAuthentication.SetAuthCookie(model.Username, false);
return RedirectToAction("Index", "Home");
}
ModelState.AddModelError(string.Empty, "Incorrect username and\or password.");
}
return View();
}
除此之外,我还有一个部分将显示 "Please sign in" 或 "Welcome user",具体取决于它们是否已通过身份验证。
我可以通过调试代码和通过 Fiddler 看到 cookie 已创建并返回。
虽然命中部分,但用户永远不会通过身份验证:
[ChildActionOnly]
public ActionResult Index()
{
if (User.Identity.IsAuthenticated) // =< This is always false.
{
var userDetailsModel = new UserDetailsModel
{
UserName = User.Identity.Name
};
return PartialView("Authenticated", userDetailsModel);
}
return PartialView("Unauthenticated");
}
我也试过这样手摇 FormsAuthenticationTicket
:
var userData = JsonConvert.SerializeObject(new { model.Username });
var issueDate = DateTime.Now;
var authenticationTicket = new FormsAuthenticationTicket(1,
model.Username,
issueDate,
issueDate.AddMinutes(5),
false,
userData);
但结果相同...
为什么我从未通过身份验证?
你的 web.config 里有类似 <authentication mode="Forms">
的东西吗
你应该拥有它。
我有一个非常正常的登录页面,只有用户名和密码字段:
<h2>Sign in</h2>
@Html.ValidationSummary()
@using (Html.BeginForm("SignIn"))
{
<p>
@Html.LabelFor(model => model.Username)
@Html.TextBoxFor(model => model.Username)
</p>
<p>
@Html.LabelFor(model => model.Password)
@Html.PasswordFor(model => model.Password)
</p>
<input type="submit" value="Submit"/>
}
我有一个登录操作定义如下:
[HttpPost]
[ActionName("SignIn")]
public ActionResult SignInConfirmation(UserCredentialsModel model)
{
if (ModelState.IsValid)
{
var userIsValid = Membership.ValidateUser(model.Username, model.Password);
if (userIsValid)
{
FormsAuthentication.SetAuthCookie(model.Username, false);
return RedirectToAction("Index", "Home");
}
ModelState.AddModelError(string.Empty, "Incorrect username and\or password.");
}
return View();
}
除此之外,我还有一个部分将显示 "Please sign in" 或 "Welcome user",具体取决于它们是否已通过身份验证。
我可以通过调试代码和通过 Fiddler 看到 cookie 已创建并返回。
虽然命中部分,但用户永远不会通过身份验证:
[ChildActionOnly]
public ActionResult Index()
{
if (User.Identity.IsAuthenticated) // =< This is always false.
{
var userDetailsModel = new UserDetailsModel
{
UserName = User.Identity.Name
};
return PartialView("Authenticated", userDetailsModel);
}
return PartialView("Unauthenticated");
}
我也试过这样手摇 FormsAuthenticationTicket
:
var userData = JsonConvert.SerializeObject(new { model.Username });
var issueDate = DateTime.Now;
var authenticationTicket = new FormsAuthenticationTicket(1,
model.Username,
issueDate,
issueDate.AddMinutes(5),
false,
userData);
但结果相同...
为什么我从未通过身份验证?
你的 web.config 里有类似 <authentication mode="Forms">
的东西吗
你应该拥有它。