表单认证方法在我的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");
}
我不确定你是否在检查用户是否登录应用程序来显示那段代码。如果没有,那么你可以先检查用户是否登录,然后使用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);
}
也在Logout方法中使用FormsAuthentication.SignOut();
对于表单身份验证,您应该使用User.Identity.Name
来获取当前登录用户的用户名。同时检查User.Identity.IsAuthenticated
,看看当前用户是否已登录。
然而,根据项目的创建方式,您可能需要在后台添加代码来处理登录。如果您在创建项目时启用了表单身份验证,则ASP。. NET将为您创建它,但如果创建项目是为了使用Windows身份验证,则可能没有这样做。
下面的教程提供了如何配置和实现表单认证的一个很好的概述:http://www.codeproject.com/Articles/578374/AplusBeginner-splusTutorialplusonplusCustomplusF