分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 网页技术

Asp.Net MVC 5使用Identity之简单的注册和登陆

发布时间:2023-09-06 01:09责任编辑:蔡小小关键词:MVC

由于.Net MVC 5登陆和注册方式有很多种,但是Identity方式去实现或许会更简单更容易理解

首先新建一个项目

其次如下选择Empty和MVC的选项

然后打开NuGet包管理器分别安装几个包

  1. EntityFramework
  2. Microsoft.AspNet.Identity.Core
  3. Microsoft.AspNet.Identity.EntityFramework
  4. Microsoft.AspNet.Identity.Owin
  5. Modernizr
  6. Microsoft.Owin.Host.SystemWeb
  7. Bootstrap

然后往Models文件夹里面添加ApplicationUser类,SignInModel类,SignUpModel类,ApplicationDbContext类,当然ApplicationDbContext类你也可以分到DbContext到另一个类库,我这是做演示用的,分层不用么这么明确

----------------------------------------------------------------------

ApplicationUser类

ApplicationDbContext类

SignInModel类

SignUpModel类

然后往App_Start文件夹里面添加ApplicationSignInManager类,ApplicationUserManager类,ApplicationUserStore类

---------------------------------------------------------------------

ApplicationUserManager类

ApplicationSignInManager类

ApplicationUserStore类

然后往Controller文件夹里面添加HomeController控制器,AccountController控制器

先往HomeController控制器里添加index视图

index视图代码

@using Microsoft.AspNet.Identity@{ ???ViewBag.Title = "Index";}<h2>Index</h2>@if (Request.IsAuthenticated){ ???using (Html.BeginForm("LogOff", "Account", FormMethod.Post, new { id = "logoutForm", @class = "navbar-right" })) ???{ ???????@Html.AntiForgeryToken() ???????<p>Hello @User.Identity.GetUserName()</p> ???????<ul> ???????????<li><a href="javascript:document.getElementById(‘logoutForm‘).submit()">Log off</a></li> ???????</ul> ???}}else{ ???<ul> ???????<li> ???????????@Html.ActionLink("Login", "Login", "Account") ???????</li> ???????<li> ???????????@Html.ActionLink("Register", "Register", "Account") ???????</li> ???</ul>}

然后AccountController控制器代码

private ApplicationSignInManager signInManager; ???????private ApplicationUserManager userManager; ???????public ApplicationSignInManager SignInManager ???????{ ???????????get ???????????{ ???????????????return signInManager ?? HttpContext.GetOwinContext().Get<ApplicationSignInManager>(); ???????????} ???????????private set ???????????{ ???????????????signInManager = value; ???????????} ???????} ???????public ApplicationUserManager UserManager ???????{ ???????????get { return userManager ?? HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>(); } ???????????private set ???????????{ ???????????????userManager = value; ???????????} ???????} ???????[AllowAnonymous] ???????public ActionResult Login(string returnUrl) ???????{ ???????????ViewBag.ReturnUrl = returnUrl; ???????????return View(); ???????} ???????[HttpPost] ???????[AllowAnonymous] ???????[ValidateAntiForgeryToken] ???????public async Task<ActionResult> Login(SignInModel model, string returnUrl) ???????{ ???????????if (!ModelState.IsValid) ???????????{ ???????????????return View(model); ???????????} ???????????var result = await SignInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, shouldLockout: false); ???????????switch (result) ???????????{ ???????????????case SignInStatus.Success: ???????????????????return RedirectToLocal(returnUrl); ???????????????case SignInStatus.Failure: ???????????????default: ???????????????????ModelState.AddModelError("", "登陆无效"); ???????????????????return View(model); ???????????} ???????} ???????[AllowAnonymous] ???????public ActionResult Register() ???????{ ???????????return View(); ???????} ???????[HttpPost] ???????[AllowAnonymous] ???????[ValidateAntiForgeryToken] ???????public async Task<ActionResult> Register(SignUpModel model) ???????{ ???????????if (ModelState.IsValid) ???????????{ ???????????????var user = new ApplicationUser { UserName = model.Email, Email = model.Email }; ???????????????var result = await UserManager.CreateAsync(user, model.Password); ???????????????if (result.Succeeded) ???????????????{ ???????????????????await SignInManager.SignInAsync(user, isPersistent: false, rememberBrowser: false); ???????????????????return RedirectToAction("Index", "Home"); ???????????????} ???????????????AddErrors(result); ???????????} ???????????return View(model); ???????} ???????[HttpPost] ???????[ValidateAntiForgeryToken] ???????public ActionResult LogOff() ???????{ ???????????AuthenticationManager.SignOut(); ???????????return RedirectToAction("Index", "Home"); ???????} ???????private void AddErrors(IdentityResult result) ???????{ ???????????foreach (var error in result.Errors) ???????????{ ???????????????ModelState.AddModelError("", error); ???????????} ???????} ???????private ActionResult RedirectToLocal(string returnUrl) ???????{ ???????????if (Url.IsLocalUrl(returnUrl)) ???????????{ ???????????????return Redirect(returnUrl); ???????????} ???????????return RedirectToAction("Index", "Home"); ???????} ???????private IAuthenticationManager AuthenticationManager ???????{ ???????????get { return HttpContext.GetOwinContext().Authentication; } ???????}

然后分别添加生成Login和Register页面

Login页面代码

@model IdentityDemo.Models.SignInModel@{ ???ViewBag.Title = "Login";}<h2>Login</h2>@using (Html.BeginForm("Login", "Account", new { ReturnUrl = ViewBag.ReturnUrl }, FormMethod.Post)){ ???@Html.AntiForgeryToken() ???????<div class="form-horizontal"> ???????<h4>SignInModel</h4> ???????<hr /> ???????@Html.ValidationSummary(true, "", new { @class = "text-danger" }) ???????<div class="form-group"> ???????????@Html.LabelFor(model => model.Email, htmlAttributes: new { @class = "control-label col-md-2" }) ???????????<div class="col-md-10"> ???????????????@Html.TextBoxFor(model => model.Email, new { htmlAttributes = new { @class = "form-control" } }) ???????????????@Html.ValidationMessageFor(model => model.Email, "", new { @class = "text-danger" }) ???????????</div> ???????</div> ???????<div class="form-group"> ???????????@Html.LabelFor(model => model.Password, htmlAttributes: new { @class = "control-label col-md-2" }) ???????????<div class="col-md-10"> ???????????????@Html.PasswordFor(model => model.Password, new { htmlAttributes = new { @class = "form-control" } }) ???????????????@Html.ValidationMessageFor(model => model.Password, "", new { @class = "text-danger" }) ???????????</div> ???????</div> ???????<div class="form-group"> ???????????@Html.LabelFor(model => model.RememberMe, htmlAttributes: new { @class = "control-label col-md-2" }) ???????????<div class="col-md-10"> ???????????????<div class="checkbox"> ???????????????????@Html.CheckBoxFor(model => model.RememberMe) ???????????????????@Html.ValidationMessageFor(model => model.RememberMe, "", new { @class = "text-danger" }) ???????????????</div> ???????????</div> ???????</div> ???????<div class="form-group"> ???????????<div class="col-md-offset-2 col-md-10"> ???????????????<input type="submit" value="SignIn" class="btn btn-default" /> ???????????</div> ???????</div> ???</div>}<div> ???@Html.ActionLink("注册", "Register")</div>

Register页面代码

@model IdentityDemo.Models.SignUpModel@{ ???ViewBag.Title = "Register";}<h2>Register</h2>@using (Html.BeginForm("Register", "Account", FormMethod.Post)){ ???@Html.AntiForgeryToken() ???????<div class="form-horizontal"> ???????<h4>SignUpModel</h4> ???????<hr /> ???????@Html.ValidationSummary(true, "", new { @class = "text-danger" }) ???????<div class="form-group"> ???????????@Html.LabelFor(model => model.Email, htmlAttributes: new { @class = "control-label col-md-2" }) ???????????<div class="col-md-10"> ???????????????@Html.TextBoxFor(model => model.Email, new { htmlAttributes = new { @class = "form-control" } }) ???????????????????????????</div> ???????</div> ???????<div class="form-group"> ???????????@Html.LabelFor(model => model.Password, htmlAttributes: new { @class = "control-label col-md-2" }) ???????????<div class="col-md-10"> ???????????????@Html.PasswordFor(model => model.Password, new { htmlAttributes = new { @class = "form-control" } }) ???????????????????????????</div> ???????</div> ???????<div class="form-group"> ???????????@Html.LabelFor(model => model.ConfirmPassword, htmlAttributes: new { @class = "control-label col-md-2" }) ???????????<div class="col-md-10"> ???????????????@Html.PasswordFor(model => model.ConfirmPassword, new { htmlAttributes = new { @class = "form-control" } }) ???????????????????????????</div> ???????</div> ???????<div class="form-group"> ???????????<div class="col-md-offset-2 col-md-10"> ???????????????<input type="submit" value="SignUp" class="btn btn-default" /> ???????????</div> ???????</div> ???</div>}

然后往项目的根目录添加Startup类

然后修改根目录的Web.Config文件

最后我们来测试一下看看效果怎么样,如下图

Asp.Net MVC 5使用Identity之简单的注册和登陆

原文地址:http://www.cnblogs.com/R00R/p/7487655.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved