[Asp.Net MVC4]验证用户登录实现
2016-03-22 11:16
585 查看
最近我们要做一个仿sina的微博,碰巧的是我最近在学习mvc,就想用mvc技术实现这个项目。
既然是微博,那不用想也应该知道肯定要有用户登陆,但是和常规的asp.net登陆又不一样,以下是我一下午+一晚上的研究成果~~~
首先,建好数据库以及表,这就不用说了吧。
下面说一下主要的结构
控制器:
HomeController 这是主页的控制器
LoginController 这是登陆的控制器
类:
CDBTemplate.cs 这是数据库数据对应的类,里边描述的是数据库的结构
////////////////////////////////////////////我是分割线\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
首先在HomeController 控制器的返回函数
[csharp] view plain copy
public ActionResult Index(){...}
前面加上:
[csharp] view plain copy
[Authorize(Roles = "admins")]
就是这样:
[csharp] view plain copy
[Authorize(Roles = "admins")]
public ActionResult Index()
{
...
}
这条语句的意思是在这加上一个权限验证,只允许用户角色是admins的用户访问
然后再web.config文件里添加:
[csharp] view plain copy
<authentication mode="Forms">
<forms loginUrl="~/Login" timeout="2880" />
</authentication>
这些的意思是给整个网站增加用户验证,指向的登陆界面是login这个控制器
CDBTemplate.cs文件里的一个类:
[csharp] view plain copy
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,在页面里面加上下面的代码:
[csharp] view plain copy
@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 控制器中增加这么一个方法:
[csharp] view plain copy
[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登陆又不一样,以下是我一下午+一晚上的研究成果~~~
首先,建好数据库以及表,这就不用说了吧。
下面说一下主要的结构
控制器:
HomeController 这是主页的控制器
LoginController 这是登陆的控制器
类:
CDBTemplate.cs 这是数据库数据对应的类,里边描述的是数据库的结构
////////////////////////////////////////////我是分割线\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
首先在HomeController 控制器的返回函数
[csharp] view plain copy
public ActionResult Index(){...}
前面加上:
[csharp] view plain copy
[Authorize(Roles = "admins")]
就是这样:
[csharp] view plain copy
[Authorize(Roles = "admins")]
public ActionResult Index()
{
...
}
这条语句的意思是在这加上一个权限验证,只允许用户角色是admins的用户访问
然后再web.config文件里添加:
[csharp] view plain copy
<authentication mode="Forms">
<forms loginUrl="~/Login" timeout="2880" />
</authentication>
这些的意思是给整个网站增加用户验证,指向的登陆界面是login这个控制器
CDBTemplate.cs文件里的一个类:
[csharp] view plain copy
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,在页面里面加上下面的代码:
[csharp] view plain copy
@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 控制器中增加这么一个方法:
[csharp] view plain copy
[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 Boilerplate 工作单元
- mvc中Scripts.Render的用法
- 面向切面(AOP)之Spring接口方式 schema配置方式 aspectj注解方式
- Spring Aop实例之AspectJ注解配置
- spring学习笔记(10)@AspectJ研磨分析[3]增强织入顺序实例详解
- spring学习笔记(11)@AspectJ研磨分析[2]切点表达式函数详解
- Server 对象 错误 \'ASP 0178 : 80070005\'
- asp Session 串号的解决方法
- spring学习笔记(10)@AspectJ研磨分析[1]入门、注解基本介绍
- 关于asp.net mvc项目部署到云服务器的一些经验分享
- .NET/ASP.NET 4.5 Bundle组件(捆绑、缩小静态文件)
- NET/ASP.NET Routing路由(深入解析路由系统架构原理)(转载)
- 【ASP.NET MVC路由测试+性能调试工具】
- ASP.NET动态生成GridView的使用
- ASP.NET Web Projects
- html+asp.net上传文件
- ASP.NET 一般处理程序
- ASP.NET Web API与Owin OAuth:调用与用户相关的Web API(三)
- ASP.NET Web API与Owin OAuth:使用Access Toke调用受保护的API(二)
- 在ASP.NET中基于Owin OAuth使用Client Credentials Grant授权发放Token(一)