我的 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.IsAuthenticatedUser.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