ASP.NET MVC 5是一种基于模型-视图-控制器(MVC)模式构建Web应用程序的框架。本文将详细讲解如何在ASP.NET MVC 5网站开发中实现用户登录和注销功能。
步骤一:创建用户登录和注销的Action方法
要实现用户登录和注销功能,需要在控制器中创建Action方法。在ASP.NET MVC 5中,可以使用内置的身份验证特性来验证用户是否已经通过身份验证。以下是示例代码:
[AllowAnonymous]
public ActionResult Login(string returnUrl)
{
ViewBag.ReturnUrl = returnUrl;
return View();
}
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
{
if (!ModelState.IsValid)
{
return View(model);
}
var user = await UserManager.FindAsync(model.UserName, model.Password);
if (user != null)
{
await SignInAsync(user, model.RememberMe);
return RedirectToLocal(returnUrl);
}
else
{
ModelState.AddModelError("", "Invalid username or password.");
return View(model);
}
}
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult LogOff()
{
AuthenticationManager.SignOut(DefaultAuthenticationTypes.ApplicationCookie);
return RedirectToAction("Index", "Home");
}
Login方法用于显示登录视图,如果用户未通过身份验证,用户可以在此视图中输入用户名和密码进行登录。HttpPost修饰符表示该方法是用于处理POST请求的Action方法。为了防止跨站请求伪造(CSRF)攻击,使用ValidateAntiForgeryToken特性。如果用户已经通过身份验证,将返回到原始URL。如果验证失败,则会在ModelState对象中添加ModelState错误,并返回到登录视图。
LogOff方法用于注销已经登录的用户。AuthenticationManager是用于管理用户身份验证的ASP.NET对象。通过调用AuthenticationManager.SignOut方法,可以注销当前已登录的用户。该方法将重定向到主页。
步骤二:创建登录视图
在创建Action方法之后,需要为其创建视图。可使用Razor语法创建具有登录表单的视图。以下是示例代码:
@model LoginViewModel
@{
ViewBag.Title = "Log in";
}
<h2>@ViewBag.Title.</h2>
@using (Html.BeginForm(new { ReturnUrl= ViewBag.ReturnUrl})) {
@Html.AntiForgeryToken()
<div class="form-group">
@Html.LabelFor(m => m.UserName, new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.TextBoxFor(m => m.UserName, new { @class = "form-control" })
@Html.ValidationMessageFor(m => m.UserName)
</div>
</div>
<div class="form-group">
@Html.LabelFor(m => m.Password, new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.PasswordFor(m => m.Password, new { @class = "form-control" })
@Html.ValidationMessageFor(m => m.Password)
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<div class="checkbox">
@Html.CheckBoxFor(m => m.RememberMe)
@Html.LabelFor(m => m.RememberMe)
</div>
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Log in" class="btn btn-default" />
</div>
</div>
}
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
}
该视图使用Bootstrap样式并且通过Razor语法创建表单。@Model指令指定数据模型的类型。表单要使用AntiForgeryToken保护,并具有用户名和密码输入框。登录视图中也可以包含注销功能。
步骤三:创建身份验证服务
管理用户身份验证是一个繁琐的过程,但ASP.NET MVC 5提供了一个内置服务Identity来完成这项任务。以下是示例代码:
public class ApplicationUser : IdentityUser
{
}
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext()
: base("DefaultConnection", throwIfV1Schema: false)
{
}
public static ApplicationDbContext Create()
{
return new ApplicationDbContext();
}
}
public class ApplicationUserManager : UserManager<ApplicationUser>
{
public ApplicationUserManager(IUserStore<ApplicationUser> store)
: base(store)
{
}
public static ApplicationUserManager Create(IdentityFactoryOptions<ApplicationUserManager> options, IOwinContext context)
{
var manager = new ApplicationUserManager(new UserStore<ApplicationUser>(context.Get<ApplicationDbContext>()));
manager.UserValidator = new UserValidator<ApplicationUser>(manager)
{
AllowOnlyAlphanumericUserNames = false,
RequireUniqueEmail = true
};
return manager;
}
}
ApplicationUser是使用Identity进行身份验证的用户对象。ApplicationDbContext是将应用程序User对象保存到数据存储的数据库上下文。ApplicationUserManager是管理ApplicationUser的身份验证的服务。
示例一:实现记住我选项
在上面的代码中,在用户提交登录表单时,如果选中“记住我”选项,则将调用async Task SignInAsync(user, isPersistent, false)方法。将isPersistent参数设置为true将导致用户在应用程序关闭后仍然处于登录状态。
示例二:实现用户角色分配
在应用程序中,可能需要使用特定用户角色来控制用户对应用程序中的内容和功能的访问。为此,需要创建具有用户角色分配和管理权限的UI来进行角色分配。然后,可以在控制器和视图中使用内置的身份验证方法来验证用户角色并根据其角色授予或拒绝访问权限。
[Authorize(Roles="Admin, SuperUser")]
public ActionResult ManageUsers()
{
// Display all users and their profiles
}
上面的代码确保只有拥有Admin和SuperUser角色的用户能够访问ManageUsers Action方法。如果用户没有这些角色,则他们将被重定向到不允许访问该页面的默认视图。
以上是ASP.NET MVC 5网站开发用户登录、注销的完整攻略,其中包含两个示例。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:ASP.NET MVC5网站开发用户登录、注销(五) - Python技术站