asp.net MVC 内置的membershipProvider可以实现用户登陆验证,但是它用的是自动创建的数据库,所以你想用本地数据库数据去验证,是通过不了的。

如果我们想用自己的数据库的话,可以写自己的membershipProvider!下面介绍如果创建自己的membershipProvider:

1.写自己的MembershipProvider类,这个类继承自命名空间System.Web.Security下的MembershipProvider类

这个类放在哪无所谓,这里我放在新建MyCode文件夹里,然后新建类,取名为MyMembershipProvider,代码如下:

using System.Web.Security;namespace MvcWeb.MyCode
{
//自定义类,继承System.Web.Security.MembershipProvider
public class MyMembershipProvider: MembershipProvider
{
}
}

现在加代码进去,把鼠标光标放在MembershipProvider上,右键选择“实现抽象类”

实现抽象类后会有很多方法,这里只用到最后一个方法代码如下:

using System.Data.SqlClient;
namespace MvcFeiGeTe.MyCode
{
//自定义类,继承System.Web.Security.MembershipProvider
public class MyMembershipProvider: MembershipProvider
{
public override bool ValidateUser(string username, string password)
{
throw new NotImplementedException();
}
}
}

下面是填充上面方法的代码:

 public override bool ValidateUser(string username, string password)
{
SqlConnection sqlconn = new SqlConnection("Data Source=.;Initial Catalog=MyDb;Integrated Security=True;user id=sa;password=admin123");
SqlCommand sqlcmd = new SqlCommand("select userName,passWord from adminInfo where userName = @userName and passWord = @passWord", sqlconn);
try
{
sqlconn.Open();
sqlcmd.Parameters.Add(new SqlParameter("@userName", SqlDbType.NVarChar, ));
sqlcmd.Parameters["@userName"].Value = username.Trim();
sqlcmd.Parameters.Add(new SqlParameter("@passWord", SqlDbType.NVarChar, ));
sqlcmd.Parameters["@passWord"].Value = password.Trim();
SqlDataReader sqlRd = sqlcmd.ExecuteReader();
if (sqlRd.HasRows)
{
return true;
}
return false;
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}

2.配置Web.config

把此配置文件下的<system.web>节点下的默认的<membership>节点换成如下(注意下划线部分):

 <membership defaultProvider="MyMembershipProvider">
<providers>
<add name="MyMembershipProvider" type="MvcWeb.MyCode.MyMembershipProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="" minRequiredPasswordLength="" minRequiredNonalphanumericCharacters="" passwordAttemptWindow="" applicationName="/" />
</providers>
</membership>

3.验证

在AccountController中:

if (ModelState.IsValid)
{
string password = FormsAuthentication.HashPasswordForStoringInConfigFile(model.passWord, "md5"); //加密
MyMembershipProvider mmsp = new MyMembershipProvider(); //自定义MyMembershipProvider,继承mvc自带的MembershipProvider,实现登陆验证,添加引用using MvcWeb.MyCode;
if (mmsp.ValidateUser(model.userName, password))
{
FormsAuthentication.SetAuthCookie(model.userName, true);
if (Url.IsLocalUrl(returnUrl) && returnUrl.Length > && returnUrl.StartsWith("/")
&& !returnUrl.StartsWith("//") && !returnUrl.StartsWith("/\\"))
{
return Redirect(returnUrl);
}
else
{
return RedirectToAction("Index", "Admin");
}
}
else
{
ModelState.AddModelError("", "用户名或密码输入有误");
}
}

ok!

asp.net MVC中如何用Membership类和自定义的数据库进行登录验证的更多相关文章

  1. ASP.NET MVC 中如何用自定义 Handler 来处理来自 AJAX 请求的 HttpRequestValidationException 错误

    今天我们的项目遇到问题 为了避免跨站点脚本攻击, 默认我们项目是启用了 validateRequest,这也是 ASP.NET 的默认验证规则.项目发布后,如果 customError 启用了,则会显 ...

  2. Asp .Net MVC中常用过滤属性类

    /// <summary> /// /// </summary> public class AjaxOnlyAttribute : ActionFilterAttribute ...

  3. 在Asp.Net MVC 中如何用JS访问Web.Config中appSettings的值

    应用场景: 很多时候我们要在Web.Config中添加appSettings的键值对来标识一些全局的信息,比如:调用service的domain,跳转其他网站页面的url 等等: 那么此时就涉及到了一 ...

  4. 在ASP.NET MVC中使用Knockout实践09,自定义绑定

    Knockout真正强大之处在于绑定机制,通过data-bind属性值体现绑定,不仅可以绑定值,还可以绑定事件,甚至可以自定义绑定. 从一个例子看Knockou的绑定机制 假设想给一个button元素 ...

  5. 在ASP.NET MVC中使用Knockout实践07,自定义验证信息的位置与内容

    在前两篇中,体验了Knockout的基本验证和自定义验证.本篇自定义验证信息的显示位置与内容. 自定义验证信息的显示位置 通常,Knockout的验证信息紧跟在input后面,通过validation ...

  6. 在ASP.NET MVC中使用Knockout实践06,自定义验证、异步验证

    在上一篇中体验了Knockout.Validation的基本验证,本篇体验自定义验证和异步验证. 自定义验证规则 ko.validation有一个rules属性,专门用来存放验证规则,它是一个键值对集 ...

  7. ADO.NET .net core2.0添加json文件并转化成类注入控制器使用 简单了解 iTextSharp实现HTML to PDF ASP.NET MVC 中 Autofac依赖注入DI 控制反转IOC 了解一下 C# AutoMapper 了解一下

    ADO.NET   一.ADO.NET概要 ADO.NET是.NET框架中的重要组件,主要用于完成C#应用程序访问数据库 二.ADO.NET的组成 ①System.Data  → DataTable, ...

  8. 转载 ASP.NET MVC中使用ASP.NET Identity

    转载原地址: http://blog.jobbole.com/90695/ 在之前的文章中,我为大家介绍了OWIN和Katana,有了对它们的基本了解后,才能更好的去学习ASP.NET Identit ...

  9. 如何在 ASP.NET MVC 中集成 AngularJS(3)

    今天来为大家介绍如何在 ASP.NET MVC 中集成 AngularJS 的最后一部分内容. 调试路由表 - HTML 缓存清除 就在我以为示例应用程序完成之后,我意识到,我必须提供两个版本的路由表 ...

随机推荐

  1. [Unity2D]GameObject游戏对象的灵活运用

    Unity2D的游戏可以说是由一堆GameObject构成的,GameObject的使用非常灵活,不仅仅是给单个精灵使用,你可以发挥你一切的想象力来利用它来解决一些实际上的问题.比如: 1.给一个精灵 ...

  2. POJ 2486 Apple Tree(树形DP)

    题目链接 树形DP很弱啊,开始看题,觉得貌似挺简单的,然后发现貌似还可以往回走...然后就不知道怎么做了... 看看了题解http://www.cnblogs.com/wuyiqi/archive/2 ...

  3. 利用Python的三元表达式解决Odoo中工资条中城镇、农村保险的问题

    Python中没有像C#中有三元表达式 A?B:C 但在python中可以通过 A if condition else B 的方式来达到同样的效果. 例如 : 1 if True else 0 输出 ...

  4. 六、saltstack的module组件

    Module是saltstack日常使用中用的最多的一个组件.用于管理操作对象. 查看系统module: [root@super65 ~]# salt 'super66' sys.list_modul ...

  5. sql2005 全文索引

    1.打开全文索引 一.检查服务里面带有Full-text字样的服务是否存在并开启! [](http://images2015.cnblogs.com/blog/23017/201611/23017-2 ...

  6. 一个关于el中获取对象属性的错误

    具体过程描述为: 在JSP页面中通过<%%>定义一个非public类.并定义两个属性相应的get和set方法.在该代码段中实例化该对象,并将该对象放入Request域中. 然后在页面中使用 ...

  7. graph | Max flow

    最大流算法,解决的是从一个起点到一个终点,通过任何条路径能够得到的最大流量. 有个Edmond-Karp算法: 1. BFS找到一条增广路径:算出这条路径的最小流量(所有边的最小值)increase: ...

  8. Spring对加载的bean之间循环依赖的处理

    根据下面文档的叙述,简言之: 对于相互之间通过构造函数注入相互循环依赖的情况,Spring会抛出BeanCurrentlyInCreationException错误. 如果AB两个beans是通过属性 ...

  9. sqlserver ldf过大处理方法

    第一步 DUMP TRANSACTION   databasename  WITH   NO_LOG  -- 第二步:截断事务日志  BACKUP LOG   databasename   WITH  ...

  10. centos6.5 64位 yum install nginx的默认安装路径

    yum install nginx网站文件存放默认目录 /usr/share/nginx/html 网站默认站点配置 /etc/nginx/conf.d/default.conf 自定义Nginx站点 ...