asp.net mvc实现系统登录及验证功能

这篇具有很好参考价值的文章主要介绍了asp.net mvc实现系统登录及验证功能。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、常见的应用场景

在网上购物或者实际的使用过程中经常遇到这样的一个场景:你必须输入用户米/密码,进行登录。登录完成后,界面自动跳转到之前的界面或者主页。具体下面的三个图所示。
asp.net mvc实现系统登录及验证功能
asp.net mvc实现系统登录及验证功能
asp.net mvc实现系统登录及验证功能

2、ASP.NET MVC的实现

在ASP.NET MVC中有个功能是身份认证(就是使用用户名和密码登录的问题),以及使用角色登录的功能。
具体代码如下:

2.1 商品列表的代码

点击商品列表中的购买本商品,界面会进行跳转。界面的代码如下所示:

<h2>商品列表</h2>

<table>
    <tr>
        <td>商品名称</td>
        <td>价格</td>
        <td>操作</td>
    </tr>
    <tr>
        <td>测试商品1</td>
        <td>100</td>
        <td>@Html.ActionLink("购买本产品", "Buy", "Home", new { productid = "001" }, null)</td>
    </tr>
    <tr>
        <td>测试商品2</td>
        <td>200</td>
        <td>@Html.ActionLink("购买本产品", "Buy", "Home", new { productid = "002" }, null)</td>
    </tr>
</table>

2.2 购买方法的权限审核

当2.1中的跳转到Home中的Buy方法时,系统会进行权限认证。Buy方法的代码如下:

[Authorize]
public ActionResult Buy(string productid)
{
    return View();
}

代码很简单,就是添加了一个特性。而这个特性的一个功能,就是MVC进行判断,若没有认证,则进行跳转到登录界面。其配置就是在项目的web.config中。

  <system.web>
    <authentication mode="Forms">
      <forms loginUrl="~/Account/LogOn" timeout="2880">
      </forms>
    </authentication>
  </system.web>

而LogOn登录界面就是,上面的第二个图片。LogOn.cshtml的代码如下:

@model AuthorizeDemo.Models.LogOnModel

@{
    ViewBag.Title = "LogOn";
}


@using (Html.BeginForm())
{
<div>
    <fieldset>
        <legend>Account Information</legend>

        <div class="editor-label">
            @Html.LabelFor(m => m.UserName)
        </div>
        <div class="editor-field">
            @Html.TextBoxFor(m => m.UserName)
        </div>

        <div class="editor-label">
            @Html.LabelFor(m => m.Password)
        </div>
        <div class="editor-field">
            @Html.PasswordFor(m => m.Password)
        </div>

        <div class="editor-label">
            @Html.CheckBoxFor(m => m.RememberMe)
            @Html.LabelFor(m => m.RememberMe)
        </div>

        <p>
            <input type="submit" value="Log On" />
        </p>
    </fieldset>
</div>}

若详细看第二张图片(LogOn.cshtml)的URL,就会发现其URL是这样的:

http://localhost/AuthorizeDemo/Account/LogOn?ReturnUrl=/AuthorizeDemo/Home/Buy?productid=1&productid=1

即,在LogOn的后面自动添加了原来界面的URL(即ReturnUrl=/AuthorizeDemo/Home/Buy)以及相关参数。

为什么会自动添加这个呢?查看MVC的源码就会发现,[Authorize]的处理原理如下:

1、在AuthorizeAttribute中的OnAuthorization方法中的逻辑如下:


//判断上下文中是否有用户的登录信息
//若无登录信息后,进行进一步的处理
IPrincipal user = httpContext.User;
if (!user.Identity.IsAuthenticated)
{
    return false;
}

//若结果为false,即用户没有登录信息,则将创建一个HttpUnauthorizedResult对象
filterContext.Result = new HttpUnauthorizedResult();

//HttpUnauthorizedResult就是一个401的变体。
context.HttpContext.Response.StatusCode = StatusCode;
if (StatusDescription != null)
{
    context.HttpContext.Response.StatusDescription = StatusDescription;
}

2、当[Authorize]的抛出HttpUnauthorizedResult异常后,MVC中FormsAuthenticationModule类中的OnLeave方法,就会捕捉到这个异常。然后在这个方法的内部,具有重定向的功能。重定向就包含了两个功能:1、web.config中的登录界面配置。2、登录后的ReturnURL。

因此刚才看到的LonOn的URL中包含了ReturnURL的内容。

2.3 登录详细操作

LogOn.cshtml界面,点击Log On登录按钮后,会已POST方式,进行提交到LogOn方法。方法的代码如下:

[HttpPost]
public ActionResult LogOn(LogOnModel model, string returnUrl)
{

    //使用Membership进行创建用户
    MembershipCreateStatus createStatus;
    Membership.CreateUser(model.UserName, model.Password,"", "question", "answer", true, null, out createStatus);

		//以上这部分的代码,应该放在注册方法中实现,这儿为了省事和验证,就统一放在LogOn方法中。
		//这样就有个bug,每次登录都会创建一个用户。
		//这儿只是为了演示使用,因此把注册的代码,合并待这儿了

		//使用Membership的验证功能
    if (Membership.ValidateUser(model.UserName, model.Password))
    {
    	 //设置cookie
        FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
		
			//判断ReturnURL是否满足条件,若满足条件,则重定向到;否则,转到主页上
        if (	Url.IsLocalUrl(returnUrl) && 
        			returnUrl.Length > 1 && 
        			returnUrl.StartsWith("/")&& 
        			!returnUrl.StartsWith("//") && 
        			!returnUrl.StartsWith("/\\"))
        {
            return Redirect(returnUrl);
        }
        else
        {
            return RedirectToAction("Index", "Home");
        }
    }
    else
    {
        ModelState.AddModelError("", "The user name or password provided is incorrect.");
    }

    return View(model);
}

上面的代码中,使用了Membership进行创建用户、验证用户等操作。那问题来了,Membership怎么创建?把用户又保存到哪里了?怎么能够看到呢?

2.4 Membership

Membership是把用户信息保存到数据库了。是保存到SQL Server LocalDB数据库了。这个数据库是跟随VS安装,自动安装了。所以Membership直接把数据放到这儿。具体位置在哪儿呢?就在应用程序中的App_Data文件夹下,如下图所示:
asp.net mvc实现系统登录及验证功能
怎么打开这个文件,看看里面的内容呢?可以通过SSMS中添加数据库进行查看
asp.net mvc实现系统登录及验证功能
【注意】直接访问App_Data中的文件会遇到访问访问权限的问题。可参考解决问题的链接

可通过相关的SQL查看数据库中的数据

select * from dbo.aspnet_Membership

select * from dbo.aspnet_Applications

select * from dbo.aspnet_PersonalizationPerUser

select * from dbo.aspnet_Profile

select * from dbo.aspnet_Users

2.4.1 Membership

Membership.CreateUser的源码如参考连接:CreateUser

2.4.1 Membership改进(自定义数据库)

Membership可以连接localDB,能连接其他数据库吗?答案可以的。可以通过相关参数设定,即可连接到其他的数据库中。具体如何进行,可参考自定义数据库

其他的参考连接:自定义数据库

3 参考连接

1、使用Membership创建用户管理
2、自定义数据库
3、基于表单的身份验证【推荐
4、ReturnURL中返回到其他站点的时候文章来源地址https://www.toymoban.com/news/detail-433922.html

到了这里,关于asp.net mvc实现系统登录及验证功能的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Go语言使用net/http实现简单登录验证和文件上传功能

         最近再看Go语言web编程,go语言搭建Web服务器,既可以用go原生的net/http包,也可以用gin/fasthttp/fiber等这些Web框架。本博客使用net/http模块编写了一个简单的登录验证和文件上传的功能,在此做个简单记录。 目录 1.文件目录结构 2.编译运行 3.用户登录  4.文件上传 5.mime/m

    2024年02月11日
    浏览(46)
  • ASP.NET CORE WEBAPI 登录 JWT 鉴权 ,接口权限验证

    介绍 当今Web开发中,API的使用越来越广泛,而API的安全性也变得越来越重要。其中,JWT(JSON Web Token)鉴权和授权是一种常见的解决方案。 本篇文章将会介绍JWT鉴权和授权的原理、实现方式以及注意事项。 什么是JWT? JWT是一种基于JSON格式的开放标准(RFC7519),用于在网络

    2023年04月21日
    浏览(67)
  • 基于ASP.NET MVC + Bootstrap的仓库管理系统

    基于ASP.NET MVC + Bootstrap的仓库管理系统。源码亲测可用,含有简单的说明文档。 适合单仓库,基本的仓库入库管理,出库管理,盘点,报损,移库,库位等管理,有着可视化图表。 系统采用Bootstrap 开发,UI 相对比较简单,业务功能不复杂,适合广大开发者。 主要包含功能如

    2024年02月06日
    浏览(43)
  • 基于ASP.NET MVC开发的、开源的个人博客系统

    推荐一个功能丰富、易于使用和扩展的开源博客,可以轻松地创建和管理自己的博客。 基于.Net Framework 4.5开发的、开源博客系统,具有丰富的功能,包括文章发布、分类、标签、评论、订阅、统计等功能,同时也可以根据需要进行自定义扩展。 提供了丰富的配置选项和API,

    2024年02月14日
    浏览(59)
  • [回馈]ASP.NET Core MVC开发实战之商城系统(开篇)

    在编程方面,从来都是实践出真知,书读百遍其义自见,所以实战是最好的提升自己编程能力的方式。 前一段时间,写了一些实战系列文章,如: ASP.NET MVC开发学生信息管理系统 Vue+Antdv+Asp.net WebApi开发学生信息管理系统 WPF+Prism+MAH+Asp.net Web Api开发学生信息管理系统 ASP.NET C

    2024年02月16日
    浏览(52)
  • [回馈]ASP.NET Core MVC开发实战之商城系统(二)

    经过一段时间的准备,新的一期【ASP.NET Core MVC开发实战之商城系统】已经开始,在之前的文章中,讲解了商城系统的整体功能设计,页面布局设计,环境搭建,系统配置,及首页商品类型,banner条,友情链接等功能的开发,今天继续讲解首页的 降价促销,新品爆款 等内容,

    2024年02月16日
    浏览(49)
  • [回馈]ASP.NET Core MVC开发实战之商城系统(一)

    经过一段时间的准备,新的一期【ASP.NET Core MVC开发实战之商城系统】已经开始,今天着重讲解布局设计,环境搭建,系统配置,及首页商品类型,banner条,友情链接等功能的开发。     首页是商城系统的门面,首页的设计的好坏关系着用户的体验,在本示例中,首页主要分

    2024年02月16日
    浏览(44)
  • [回馈]ASP.NET Core MVC开发实战之商城系统(三)

    经过一段时间的准备,新的一期【ASP.NET Core MVC开发实战之商城系统】已经开始,在之前的文章中,讲解了商城系统的整体功能设计,页面布局设计,环境搭建,系统配置,及首页【商品类型,banner条,友情链接,降价促销,新品爆款】等功能的开发,今天继续讲解 商品列表

    2024年02月15日
    浏览(42)
  • [回馈]ASP.NET Core MVC开发实战之商城系统(四)

    经过一段时间的准备,新的一期【ASP.NET Core MVC开发实战之商城系统】已经开始,在之前的文章中,讲解了商城系统的整体功能设计,页面布局设计,环境搭建,系统配置,及首页【商品类型,banner条,友情链接,降价促销,新品爆款】,商品列表页面等功能的开发,今天继续

    2024年02月15日
    浏览(47)
  • [回馈]ASP.NET Core MVC开发实战之商城系统(六)

    经过一段时间的准备,新的一期【ASP.NET Core MVC开发实战之商城系统】已经开始,在之前的文章中,讲解了商城系统的整体功能设计,页面布局设计,环境搭建,系统配置,及首页【商品类型,banner条,友情链接,降价促销,新品爆款】,商品列表页面,商品详情,购物车等功

    2024年02月11日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包