[Asp.Net MVC4]验证用户登录实现
最近我们要做一个仿sina的微博,碰巧的是我最近在学习mvc,就想用mvc技术实现这个项目。
既然是微博,那不用想也应该知道肯定要有用户登陆,但是和常规的asp.net登陆又不一样,以下是我一下午+一晚上的研究成果~~~
首先,建好数据库以及表,这就不用说了吧。
下面说一下主要的结构
控制器:
HomeController 这是主页的控制器
LoginController 这是登陆的控制器
类:
CDBTemplate.cs 这是数据库数据对应的类,里边描述的是数据库的结构
////////////////////////////////////////////我是分割线\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
首先在HomeController 控制器的返回函数
- public ActionResult Index(){...}
前面加上:
- [Authorize(Roles = "admins")]
就是这样:
- [Authorize(Roles = "admins")]
- public ActionResult Index()
- {
- ...
- }
这条语句的意思是在这加上一个权限验证,只允许用户角色是admins的用户访问
然后再web.config文件里添加:
- <authentication mode="Forms">
- <forms loginUrl="~/Login" timeout="2880" />
- </authentication>
这些的意思是给整个网站增加用户验证,指向的登陆界面是login这个控制器
CDBTemplate.cs文件里的一个类:
- public class LogOnModel
- {
- [Required]
- [Display(Name = "用户名")]
- public string UserName { get; set; }
- [Required]
- [DataType(DataType.Password)]
- [Display(Name = "密码")]
- public string Password { get; set; }
- [Display(Name = "下次自动登陆")]
- public bool RememberMe { get; set; }
- }
然后为LoginController 控制器的默认返回函数增加一个视图Index.cshtml,在页面里面加上下面的代码:
- @model Weibo.Models.LogOnModel //LogOnModel 是CDBTemplate.cs文件里的一个类
- @using (Html.BeginForm("Login","Login",FormMethod.Post)) {
- @Html.TextBoxFor(m => m.UserName)
- @Html.ValidationMessageFor(m => m.UserName, "请输入用户名!", new {style="color: #f00" })
- @Html.PasswordFor(m => m.Password)
- @Html.ValidationMessageFor(m => m.Password,"请输入密码!",new {style="color: #f00" })
- @Html.CheckBoxFor(m => m.RememberMe)
- @Html.LabelFor(m => m.RememberMe)
- @Html.ActionLink("忘记密码", "forgotpwd", null, new {@class="rt",target="_blank" })
- <input type="submit" value="登陆微博" />
- }
在
上面的代码里Html.BeginForm("Login","Login",FormMethod.Post)方法的第一个参数的意思是指定要调用的控
制器的方法的名字,第二个参数的意思是控制器的名字,第三个参数的意思是用什么方法把表单提交给服务器,这里我们为了安全,选择用post方式提交。
然后在LoginController 控制器中增加这么一个方法:
- [HttpPost, ActionName("Login")]
- public void Login(FormCollection collection)
- {
- object obj = SqlHelper.ExecuteScalar("select UserId from CDBUsers where UserName=@uname and Password=@pwd",
- new SqlParameter("@uname", collection[0]),
- new SqlParameter("@pwd", Weibo.Models.Myencrypt.myencrypt(collection[1])));
- if (obj != null)
- {
- FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket(
- 1,
- collection[0],
- DateTime.Now,
- DateTime.Now.AddMinutes(30),
- false,
- "admins"
- );
- string encryptedTicket = FormsAuthentication.Encrypt(authTicket);
- System.Web.HttpCookie authCookie = new System.Web.HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket);
- System.Web.HttpContext.Current.Response.Cookies.Add(authCookie);
- }
- Response.Redirect("~/");
- }
好了,搞定了~~~~
转自http://blog.csdn.net/hsppl/article/details/7396526
[Asp.Net MVC4]验证用户登录实现的更多相关文章
- MVC4验证用户登录特性实现方法
在开发过程中,需要用户登陆才能访问指定的页面这种功能,微软已经提供了这个特性. // 摘要: // 表示一个特性,该特性用于限制调用方对操作方法的访问. [AttributeUsage(Attribu ...
- 【转】MVC4验证用户登录特性实现方法
在开发过程中,需要用户登陆才能访问指定的页面这种功能,微软已经提供了这个特性. // 摘要: // 表示一个特性,该特性用于限制调用方对操作方法的访问. [AttributeUsage(Attribu ...
- Asp.net mvc验证用户登录之Forms实现
这里我们采用asp.net mvc 自带的AuthorizeAttribute过滤器验证用户的身份,也可以使用自定义过滤器,步骤都是一样. 第一步:创建asp.net mvc项目, 在项目的App_S ...
- MVC4项目中验证用户登录一个特性就搞定
在开发过程中,需要用户登陆才能访问指定的页面这种功能,微软已经提供了这个特性. // 摘要: // 表示一个特性,该特性用于限制调用方对操作方法的访问. [AttributeUsage(Attribu ...
- Asp.Net使用加密cookie代替session验证用户登录状态 源码分享
首先 session 和 cache 拥有各自的优势而存在. 他们的优劣就不在这里讨论了. 本实例仅存储用户id于用户名,对于多级权限的架构,可以自行修改增加权限字段 本实例采用vs2010编写 ...
- [转]MVC4项目中验证用户登录一个特性就搞定
本文转自:http://www.mrhuo.com/Article/Details/470/A-Attribute-For-MVC4-Project-Used-To-Validate-User-Log ...
- easyui datagrid 禁止选中行 EF的增删改查(转载) C# 获取用户IP地址(转载) MVC EF 执行SQL语句(转载) 在EF中执行SQL语句(转载) EF中使用SQL语句或存储过程 .net MVC使用Session验证用户登录 PowerDesigner 参照完整性约束(转载)
easyui datagrid 禁止选中行 没有找到可以直接禁止的属性,但是找到两个间接禁止的方式. 方式一: //onClickRow: function (rowIndex, rowData) ...
- 单点登录CAS使用记(三):实现自定义验证用户登录
问题: CAS自带的用户验证逻辑太过简单,如何像正常网站一样,通过验证DB中的用户数据,来验证用户以及密码的合法性呢? 方案1:CAS默认的JDBC扩展方案: CAS自带了两种简单的通过JDBC方式验 ...
- 转:C4项目中验证用户登录一个特性就搞定
转:C4项目中验证用户登录一个特性就搞定 在开发过程中,需要用户登陆才能访问指定的页面这种功能,微软已经提供了这个特性. // 摘要: // 表示一个特性,该特性用于限制调用 ...
随机推荐
- codeforces 242E - XOR on Segment (线段树 按位数建树)
E. XOR on Segment time limit per test 4 seconds memory limit per test 256 megabytes input standard i ...
- Educational Codeforces Round 54 [Rated for Div. 2] (CF1076)
第一次在宿舍打CF 把同宿舍的妹子吵得不行... 特此抱歉QAQ A 题意:给定一个字符串, 最多删掉一个字符,使得剩余字符串字典序最小 n<=2e5 当然"最多"是假的 删 ...
- Java和操作系统交互细节
结合 CPU 理解一行 Java 代码是怎么执行的 根据冯·诺依曼思想,计算机采用二进制作为数制基础,必须包含:运算器.控制器.存储设备,以及输入输出设备,如下图所示. enter image des ...
- 【BZOJ4890】[TJOI2017]城市(动态规划)
[BZOJ4890][TJOI2017]城市(动态规划) 题面 BZOJ 洛谷 题解 数据范围都这样了,显然可以暴力枚举断开哪条边. 然后求出两侧直径,暴力在直径上面找到一个点,使得其距离直径两端点的 ...
- 【BZOJ5294】[BJOI2018]二进制(线段树)
[BZOJ5294][BJOI2018]二进制(线段树) 题面 BZOJ 洛谷 题解 二进制串在模\(3\)意义下,每一位代表的余数显然是\(121212\)这样子交替出现的. 其实换种方法看,就是\ ...
- 计算机网络实验八实验报告——应用Packet Tracer 5.0模拟器工具对WLAN进行配置
计算机网络实验八实验报告 一.实验目的 1.熟练使用Packet Tracer 5.0模拟器: 2.应用Packet Tracer 5.0模拟器工具对WLAN进行配置. 二.实验环境 一台PC机. 模 ...
- bandwagon host
104.20.6.63 bandwagonhost.com 104.20.6.63 bwh1.net
- BZOJ3779重组病毒LCT
题目描述 黑客们通过对已有的病毒反编译,将许多不同的病毒重组,并重新编译出了新型的重组病毒.这种病毒的繁殖和变异能力极强.为了阻止这种病毒传播,某安全机构策划了一次实验,来研究这种病毒.实验在一个封闭 ...
- mysql 替换字符中部分字符,替换使用指定字符
update table_name set name= replace(name,'我是','是');
- Vagrant将下载好的镜像装载到本地中
Vagrant box add centos7 ${path}CentOS-7-x86_64-Vagrant-1803_01.VirtualBox Vagrant init ${名字} Vagrant ...