我的 ASP.NET 页面中的表单验证方法
Form authentication method in my ASP.NET page
我目前正在内部网上实习(第一年 comp.sci.student)- 我使用了最后一个实习生代码并不得不调试它/做一些调整。到目前为止进展顺利;但我现在的工作是从 Windows 身份验证方法转变为基于表单的身份验证方法,当涉及到它时我很迷茫。到目前为止,我已经将 Web.config 中的身份验证模式更改为表单,但问题是:
通过添加
<authentication mode="Forms">
<forms loginUrl="~/Account/Login" timeout="2880" /> <!-- Was in comments -->
</authentication>
<authorization>
<deny users="?" />
</authorization>
到我的 Web.config 它会将我重定向到要求我输入信息的基本登录页面。 (由于授权)
但它仍然显示 Site.Master 中的以下内容:
<div class="float-right">
Welcome <%: System.Environment.UserName %> - <a href='<%= Url.Action("MyProfile", "Employee") %>'>My Profile</a> | <%: Html.ActionLink("Logout", "Deco", "Home") %>
</div> <!-- Should only display if logged in -->
好像我仍然登录并且可以更改我的个人资料。
有没有办法只在我的基于表单的身份验证登录时显示它?
编辑:另外,我应该怎么做才能从 Windows auth.到基于表单的?
EDIT2:这是来自我的 AccountController 的代码:
[Authorize]
[InitializeSimpleMembership]
public class AccountController : Controller
{
//
// GET: /Account/Login
[AllowAnonymous]
public ActionResult Login(string returnUrl)
{
ViewBag.ReturnUrl = returnUrl;
return View();
}
//
// POST: /Account/Login
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public ActionResult Login(LoginModel model, string returnUrl)
{
if (ModelState.IsValid && WebSecurity.Login(model.UserName, model.Password, persistCookie: model.RememberMe))
{
return RedirectToLocal(returnUrl);
}
// If we got this far, something failed, redisplay form
ModelState.AddModelError("", "The user name or password provided is incorrect.");
return View(model);
}
//
// POST: /Account/LogOff
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult LogOff()
{
WebSecurity.Logout();
//FormsAuthentication.SignOut();
return RedirectToAction("Index", "Home");
}
我不确定您是否正在检查用户是否已登录应用程序以显示该段代码。如果没有,那么您可以先检查用户是否已登录,然后使用 Request.IsAuthenticated
或 User.Identity.IsAuthenticated
:
显示 html
@if(Request.IsAuthenticated) {
<div class="float-right">
Welcome <%: System.Environment.UserName %> - <a href='<%= Url.Action("MyProfile", "Employee") %>'>My Profile</a> | <%: Html.ActionLink("Logout", "Deco", "Home") %>
</div> <!-- Should only display if logged in -->
}
或:
@if (User.Identity.IsAuthenticated) {
<div class="float-right">
Welcome <%: System.Environment.UserName %> - <a href='<%= Url.Action("MyProfile", "Employee") %>'>My Profile</a> | <%: Html.ActionLink("Logout", "Deco", "Home") %>
</div> <!-- Should only display if logged in -->
}
编辑:
您还应该更改登录方法以使用 FormsAuthentication.Authenticate
用户身份验证方法:
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public ActionResult Login(LoginModel model, string returnUrl)
{
if (ModelState.IsValid && FormsAuthentication.Authenticate(model.UserName, model.Password, persistCookie: model.RememberMe))
{
return RedirectToLocal(returnUrl);
}
// If we got this far, something failed, redisplay form
ModelState.AddModelError("", "The user name or password provided is incorrect.");
return View(model);
}
也在您的注销方法中使用 FormsAuthentication.SignOut();
对于表单身份验证,您应该使用 User.Identity.Name
来获取当前登录用户的用户名。还要检查 User.Identity.IsAuthenticated
以查看当前用户是否已登录。
但是,根据项目的创建方式,您可能需要在后台添加代码来处理登录。如果您在创建项目时启用表单身份验证,ASP.NET 将为您创建它,但如果创建项目是为了使用 Windows 身份验证,则可能不会这样做。
以下教程很好地概述了如何配置和实施表单身份验证:
http://www.codeproject.com/Articles/578374/AplusBeginner-splusTutorialplusonplusCustomplusF
我目前正在内部网上实习(第一年 comp.sci.student)- 我使用了最后一个实习生代码并不得不调试它/做一些调整。到目前为止进展顺利;但我现在的工作是从 Windows 身份验证方法转变为基于表单的身份验证方法,当涉及到它时我很迷茫。到目前为止,我已经将 Web.config 中的身份验证模式更改为表单,但问题是:
通过添加
<authentication mode="Forms">
<forms loginUrl="~/Account/Login" timeout="2880" /> <!-- Was in comments -->
</authentication>
<authorization>
<deny users="?" />
</authorization>
到我的 Web.config 它会将我重定向到要求我输入信息的基本登录页面。 (由于授权)
但它仍然显示 Site.Master 中的以下内容:
<div class="float-right">
Welcome <%: System.Environment.UserName %> - <a href='<%= Url.Action("MyProfile", "Employee") %>'>My Profile</a> | <%: Html.ActionLink("Logout", "Deco", "Home") %>
</div> <!-- Should only display if logged in -->
好像我仍然登录并且可以更改我的个人资料。
有没有办法只在我的基于表单的身份验证登录时显示它?
编辑:另外,我应该怎么做才能从 Windows auth.到基于表单的?
EDIT2:这是来自我的 AccountController 的代码:
[Authorize]
[InitializeSimpleMembership]
public class AccountController : Controller
{
//
// GET: /Account/Login
[AllowAnonymous]
public ActionResult Login(string returnUrl)
{
ViewBag.ReturnUrl = returnUrl;
return View();
}
//
// POST: /Account/Login
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public ActionResult Login(LoginModel model, string returnUrl)
{
if (ModelState.IsValid && WebSecurity.Login(model.UserName, model.Password, persistCookie: model.RememberMe))
{
return RedirectToLocal(returnUrl);
}
// If we got this far, something failed, redisplay form
ModelState.AddModelError("", "The user name or password provided is incorrect.");
return View(model);
}
//
// POST: /Account/LogOff
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult LogOff()
{
WebSecurity.Logout();
//FormsAuthentication.SignOut();
return RedirectToAction("Index", "Home");
}
我不确定您是否正在检查用户是否已登录应用程序以显示该段代码。如果没有,那么您可以先检查用户是否已登录,然后使用 Request.IsAuthenticated
或 User.Identity.IsAuthenticated
:
@if(Request.IsAuthenticated) {
<div class="float-right">
Welcome <%: System.Environment.UserName %> - <a href='<%= Url.Action("MyProfile", "Employee") %>'>My Profile</a> | <%: Html.ActionLink("Logout", "Deco", "Home") %>
</div> <!-- Should only display if logged in -->
}
或:
@if (User.Identity.IsAuthenticated) {
<div class="float-right">
Welcome <%: System.Environment.UserName %> - <a href='<%= Url.Action("MyProfile", "Employee") %>'>My Profile</a> | <%: Html.ActionLink("Logout", "Deco", "Home") %>
</div> <!-- Should only display if logged in -->
}
编辑:
您还应该更改登录方法以使用 FormsAuthentication.Authenticate
用户身份验证方法:
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public ActionResult Login(LoginModel model, string returnUrl)
{
if (ModelState.IsValid && FormsAuthentication.Authenticate(model.UserName, model.Password, persistCookie: model.RememberMe))
{
return RedirectToLocal(returnUrl);
}
// If we got this far, something failed, redisplay form
ModelState.AddModelError("", "The user name or password provided is incorrect.");
return View(model);
}
也在您的注销方法中使用 FormsAuthentication.SignOut();
对于表单身份验证,您应该使用 User.Identity.Name
来获取当前登录用户的用户名。还要检查 User.Identity.IsAuthenticated
以查看当前用户是否已登录。
但是,根据项目的创建方式,您可能需要在后台添加代码来处理登录。如果您在创建项目时启用表单身份验证,ASP.NET 将为您创建它,但如果创建项目是为了使用 Windows 身份验证,则可能不会这样做。
以下教程很好地概述了如何配置和实施表单身份验证: http://www.codeproject.com/Articles/578374/AplusBeginner-splusTutorialplusonplusCustomplusF