表单认证方法在我的ASP.网络页面

本文关键字:网络 ASP 我的 认证 方法 表单 | 更新日期: 2023-09-27 18:12:33

我目前在公司内部网络实习(第一年)。学生)-我拿了最后的实习生代码,不得不调试它/做一些调整。到目前为止一切都很顺利;但我现在的工作是从Windows身份验证方法转向基于表单的方法,当涉及到它时,我很迷路。到目前为止,我已经更改了Web中的身份验证模式。配置到表单,但问题是:

通过添加

<authentication mode="Forms">
  <forms loginUrl="~/Account/Login" timeout="2880" /> <!-- Was in comments -->
</authentication>
<authorization>
  <deny users="?" />
</authorization>

到我的网页。配置它重定向到基本登录页面,需要我输入我的信息。(由于授权)

但是它仍然显示以下来自站点的内容。主:

<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认证迁移。是基于表单的吗?

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");
    }

表单认证方法在我的ASP.网络页面

我不确定你是否在检查用户是否登录应用程序来显示那段代码。如果没有,那么你可以先检查用户是否登录,然后使用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);
    }

也在Logout方法中使用FormsAuthentication.SignOut();

对于表单身份验证,您应该使用User.Identity.Name来获取当前登录用户的用户名。同时检查User.Identity.IsAuthenticated,看看当前用户是否已登录。

然而,根据项目的创建方式,您可能需要在后台添加代码来处理登录。如果您在创建项目时启用了表单身份验证,则ASP。. NET将为您创建它,但如果创建项目是为了使用Windows身份验证,则可能没有这样做。

下面的教程提供了如何配置和实现表单认证的一个很好的概述:http://www.codeproject.com/Articles/578374/AplusBeginner-splusTutorialplusonplusCustomplusF