最近我们要做一个仿sina的微博,碰巧的是我最近在学习mvc,就想用mvc技术实现这个项目。

既然是微博,那不用想也应该知道肯定要有用户登陆,但是和常规的asp.net登陆又不一样,以下是我一下午+一晚上的研究成果~~~

首先,建好数据库以及表,这就不用说了吧。

下面说一下主要的结构

控制器:

HomeController 这是主页的控制器

LoginController 这是登陆的控制器

类:

CDBTemplate.cs 这是数据库数据对应的类,里边描述的是数据库的结构

////////////////////////////////////////////我是分割线\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

首先在HomeController 控制器的返回函数

  1. public ActionResult Index(){...}

前面加上:

  1. [Authorize(Roles = "admins")]

就是这样:

  1. [Authorize(Roles = "admins")]
  2. public ActionResult Index()
  3. {
  4. ...
  5. }

这条语句的意思是在这加上一个权限验证,只允许用户角色是admins的用户访问

然后再web.config文件里添加:

  1. <authentication mode="Forms">
  2. <forms loginUrl="~/Login" timeout="2880" />
  3. </authentication>

这些的意思是给整个网站增加用户验证,指向的登陆界面是login这个控制器

CDBTemplate.cs文件里的一个类:

  1. public class LogOnModel
  2. {
  3. [Required]
  4. [Display(Name = "用户名")]
  5. public string UserName { get; set; }
  6. [Required]
  7. [DataType(DataType.Password)]
  8. [Display(Name = "密码")]
  9. public string Password { get; set; }
  10. [Display(Name = "下次自动登陆")]
  11. public bool RememberMe { get; set; }
  12. }

然后为LoginController 控制器的默认返回函数增加一个视图Index.cshtml,在页面里面加上下面的代码:

  1. @model Weibo.Models.LogOnModel //LogOnModel 是CDBTemplate.cs文件里的一个类
  2. @using (Html.BeginForm("Login","Login",FormMethod.Post)) {
  3. @Html.TextBoxFor(m => m.UserName)
  4. @Html.ValidationMessageFor(m => m.UserName, "请输入用户名!", new {style="color: #f00" })
  5. @Html.PasswordFor(m => m.Password)
  6. @Html.ValidationMessageFor(m => m.Password,"请输入密码!",new {style="color: #f00" })
  7. @Html.CheckBoxFor(m => m.RememberMe)
  8. @Html.LabelFor(m => m.RememberMe)
  9. @Html.ActionLink("忘记密码", "forgotpwd", null, new {@class="rt",target="_blank" })
  10. <input type="submit" value="登陆微博" />
  11. }


上面的代码里Html.BeginForm("Login","Login",FormMethod.Post)方法的第一个参数的意思是指定要调用的控
制器的方法的名字,第二个参数的意思是控制器的名字,第三个参数的意思是用什么方法把表单提交给服务器,这里我们为了安全,选择用post方式提交。

然后在LoginController 控制器中增加这么一个方法:

  1. [HttpPost, ActionName("Login")]
  2. public void Login(FormCollection collection)
  3. {
  4. object obj = SqlHelper.ExecuteScalar("select UserId from CDBUsers where UserName=@uname and Password=@pwd",
  5. new SqlParameter("@uname", collection[0]),
  6. new SqlParameter("@pwd", Weibo.Models.Myencrypt.myencrypt(collection[1])));
  7. if (obj != null)
  8. {
  9. FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket(
  10. 1,
  11. collection[0],
  12. DateTime.Now,
  13. DateTime.Now.AddMinutes(30),
  14. false,
  15. "admins"
  16. );
  17. string encryptedTicket = FormsAuthentication.Encrypt(authTicket);
  18. System.Web.HttpCookie authCookie = new System.Web.HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket);
  19. System.Web.HttpContext.Current.Response.Cookies.Add(authCookie);
  20. }
  21. Response.Redirect("~/");
  22. }

好了,搞定了~~~~

转自http://blog.csdn.net/hsppl/article/details/7396526

[Asp.Net MVC4]验证用户登录实现的更多相关文章

  1. MVC4验证用户登录特性实现方法

    在开发过程中,需要用户登陆才能访问指定的页面这种功能,微软已经提供了这个特性. // 摘要: // 表示一个特性,该特性用于限制调用方对操作方法的访问. [AttributeUsage(Attribu ...

  2. 【转】MVC4验证用户登录特性实现方法

    在开发过程中,需要用户登陆才能访问指定的页面这种功能,微软已经提供了这个特性. // 摘要: // 表示一个特性,该特性用于限制调用方对操作方法的访问. [AttributeUsage(Attribu ...

  3. Asp.net mvc验证用户登录之Forms实现

    这里我们采用asp.net mvc 自带的AuthorizeAttribute过滤器验证用户的身份,也可以使用自定义过滤器,步骤都是一样. 第一步:创建asp.net mvc项目, 在项目的App_S ...

  4. MVC4项目中验证用户登录一个特性就搞定

    在开发过程中,需要用户登陆才能访问指定的页面这种功能,微软已经提供了这个特性. // 摘要: // 表示一个特性,该特性用于限制调用方对操作方法的访问. [AttributeUsage(Attribu ...

  5. Asp.Net使用加密cookie代替session验证用户登录状态 源码分享

    首先 session 和 cache 拥有各自的优势而存在.  他们的优劣就不在这里讨论了. 本实例仅存储用户id于用户名,对于多级权限的架构,可以自行修改增加权限字段   本实例采用vs2010编写 ...

  6. [转]MVC4项目中验证用户登录一个特性就搞定

    本文转自:http://www.mrhuo.com/Article/Details/470/A-Attribute-For-MVC4-Project-Used-To-Validate-User-Log ...

  7. easyui datagrid 禁止选中行 EF的增删改查(转载) C# 获取用户IP地址(转载) MVC EF 执行SQL语句(转载) 在EF中执行SQL语句(转载) EF中使用SQL语句或存储过程 .net MVC使用Session验证用户登录 PowerDesigner 参照完整性约束(转载)

    easyui datagrid 禁止选中行   没有找到可以直接禁止的属性,但是找到两个间接禁止的方式. 方式一: //onClickRow: function (rowIndex, rowData) ...

  8. 单点登录CAS使用记(三):实现自定义验证用户登录

    问题: CAS自带的用户验证逻辑太过简单,如何像正常网站一样,通过验证DB中的用户数据,来验证用户以及密码的合法性呢? 方案1:CAS默认的JDBC扩展方案: CAS自带了两种简单的通过JDBC方式验 ...

  9. 转:C4项目中验证用户登录一个特性就搞定

    转:C4项目中验证用户登录一个特性就搞定   在开发过程中,需要用户登陆才能访问指定的页面这种功能,微软已经提供了这个特性.     // 摘要:    //     表示一个特性,该特性用于限制调用 ...

随机推荐

  1. 使用IDEA部署项目到远程服务器

    1.选择Tools -> Deployment -> Configuration... 2.配置连接信息,Linux服务器一般都选择SFTP 3.配置本地上传文件路径.远程上传文件路径 4 ...

  2. [算法进阶0x10]基本数据结构C作业总结

    t1-Supermarket 超市利润 题目大意 给定n个商品,每个商品有利润pi和过期时间di.每天只能卖一个商品,过期商品不能卖.求如何安排每天卖的商品可以使收益最大. 分析 一开始打了一个复杂度 ...

  3. emwin之自绘制 BUTTON 图形的一些问题

    @2018-11-8 [小记] [需求] 官方只提供圆角矩形图形,其他图形及颜色需求则要自己实现 [注意] 通过回调函数自实现的图形绘制存在该回调函数一直被调用的现象,而非像窗口回调函数中 BUTTO ...

  4. One-hot encoding 独热编码

    http://blog.sina.com.cn/s/blog_5252f6ca0102uy47.html

  5. pandas to_excel

    报错:IllegalCharacterError 其原因是字段中包含了unicode字符. 解决方案: # 首先,安装python包xlsxwriter pip install xlsxwriter ...

  6. 【模板】2-SAT

    题目大意:给定 N 个点的 M 条约束,约束形式为:\(a_i \lor a_j = 1\). 题解:拆点什么的就不说了,在求出一组解的时候,考虑到 Tarjan 找环的过程中,scc 染色是按照拓扑 ...

  7. git的使用命令

    git archive --format zip --output "./test.zip" master -0 将项目的代码通过上述命令打包压缩为test文件夹 ssh-keyg ...

  8. 斯坦福大学公开课机器学习: neural networks learning - autonomous driving example(通过神经网络实现自动驾驶实例)

    使用神经网络来实现自动驾驶,也就是说使汽车通过学习来自己驾驶. 下图是通过神经网络学习实现自动驾驶的图例讲解: 左下角是汽车所看到的前方的路况图像.左上图,可以看到一条水平的菜单栏(数字4所指示方向) ...

  9. 利用/dev/urandom文件创建随机数

    1:/dev/urandom和/dev/random是什么 这两个文件记录Linux下的熵池,所谓熵池就是当前系统下的环境噪音,描述了一个系统的混乱程度,环境噪音由这几个方面组成,如内存的使用,文件的 ...

  10. Luogu P1117 [NOI2016]优秀的拆分

    题目链接 \(Click\) \(Here\) 这题质量不错,就是暴力分有点足\(hhhhhhhh\),整整有\(95\)分. (搞得我写完暴力都不想写正解直接理解思路之后就直接水过去了\(QwQ\) ...