Asp.net mvc验证用户登录之形式实现详解
这里我们采用ASP。网最有价值球员自带的AuthorizeAttribute过滤器验证用户的身份,也可以使用自定义过滤器,步骤都是一样。
第一步:创建ASP。网最有价值球员项目,在项目的应用程序_开始文件夹下面有一个FilterConfig.cs,在这个文件中可以注册全局的过滤器。我们在文件中添加AuthorizeAttribute过滤器如下:
公共类过滤器配置{公共静态void RegisterGlobalFilters(GlobalFilterCollection filters){ filters .add(new handleerrortattribute());//将内置的权限过滤器添加到全局过滤中过滤器。添加(新系统网络。MVC。author izeattribute());} }第二步:在网络。配置配置文件中修改网站的身份认证为模式='表单'
system.web!-可奇名称,当用未登入时跳转的url -身份验证模式=' Forms ' Forms name=' xCookie ' login rol=' ~/log in/Index ' protection=' All ' time out=' 60 ' cookieless=' UseCookies '/Forms/身份验证编译调试=' true ' TargetFrameWork=' 4.5 '/httpruntimetargetFrameWork=' 4.5 '/system。网提示:配置名字值作为最终生成的甜饼干的名称,loginUrl指定当用户未登入是跳转的页面,这里挑战到登入页面
第三步:添加用户登入相关的控制器和视图
创建逻辑控制器控制器:
公共类LoginController :控制器{ [HttpGet] [AllowAnonymous]公共操作结果索引(){返回视图();}[httpset][AllowAnonymous]公共操作结果登录(用户用户){ if(!用户。用户名。修剪().等号('刘鑫')||!用户。密码。修剪()。等于(‘ABC’){模型状态.AddModelError(','用户名或密码错误');返回视图('索引,用户);} //if(!用户。用户名。修剪().等于('刘鑫){ //ModelState .添加模式错误('用户名','用户名错误');//返回视图('索引',用户);//} //if(!用户。密码。修剪()。等于(‘ABC’){//模型状态.添加模式错误('密码','密码错误');//返回视图('索引',用户);//}用户Id=Guid .NewGuid().ToString(' D ');//为了测试手动设置一个用户id FormsAuthHelp .AddFormsAuthCookie(用户身份证,用户,60);//设置票票据的名称为用户的id,设置有效时间为60分钟返回重定向(' ~ ');}[HttpGet]公共操作结果Logout(){ FormsAuthHelp .RemoveFormsAuthCookie();返回重定向(' ~/登录/索引');} }特别注意:索引和注册这两个方法得使用"[允许匿名]"指明这两个方法可以匿名访问,否则由于过滤器不允许匿名访问,导致登入页面和用户提交都无法进行。显然这不是我们希望看到的。
提示:为了测试方便这边的用户的数据是写死的,用户的编号也是临时生成了一个
公共类用户{公共字符串Id { get设置;}公共字符串用户名{ get设置;}公共字符串密码{ get设置;} }创建登入视图:
@ {布局=空视图包。标题="索引";}h3您尚未登入,请登入/H3/使用(Html .开始通知('登录','登录,表单方法发布){ @Html .标签('用户名','用户名:')@Html .文本框('用户名,空,新{ id='用户名,占位符='请输入用户名}) @Html .验证消息(“用户名”)br/@ Html .标签('密码','密码:')@Html .文本框('密码,空,新{ id='密码,占位符='请输入密码}) @Html .验证消息('密码)br/输入类型='提交'值='登入/input type='reset' value='重置/@Html .ValidationSummary(true)}提示:当检测到用户未登入,则跳转到网络。配置中配置的全球资源定位器(统一资源定位符)页面,当用户填写密码并提交时,用户输入的数据会提交到逻辑控制器控制器下的注册方法,验证用户的输入,认证失败重新返回到登入界面,当认证成功,将会执行
***FormsAuthHelp。AddFormsAuthCookie(用户。Id,用户,60);//将票证名称设置为用户id,并将有效时间设置为60分钟* * *。这个语句的功能是生成一个票证,并将其打包到一个cookie中。ASP.NET MVC通过检测这个cookie来正式验证用户是否登录。具体代码如下
第四步:将用户信息生成的票据打包到cookie中
public class formsauthhelp {///summary///根据当前登录用户的信息生成票证,并将其添加到cookie中(用于登录)/////summary//param name=' loginname '形成与身份验证票证关联的用户名(通常是当前用户的id,用作票证的名称)/param ///param name='userData '用户信息/param///param name=' expirem '到期日期/param public static void addformsauthcookie(字符串loginname,Object序列化对象(用户数据);//创建一个FormsAuthenticationTicket,其中包含登录名和额外的用户数据。var ticket=new FormsAuthenticationTicket(1,loginName,DateTime。现在,日期时间。现在。添加天数(1),真,数据);//将票证加密为加密字符串。var cookieValue=FormsAuthentication。加密(票证);//根据加密结果创建登录cookie//formsauthentication . formscookiname是配置文件中指定的cookie名称。默认值为“”。aspxauth' var cookie=新的http cookie (formsauthentication。formscookiename,cookie值){httponly=true,Secure=FormsAuthentication。要求SSL,域=表单验证。CookieDomain,路径=FormsAuthentication。formscookePath };//设置if (expiremin0) cookie的有效时间。expires=日期时间。现在。add minutes(expi remin);var context=HttpContext。当前;if (context==null)引发新的InvalidOperationException();//写入登录cookie context . response . cookies . remove(cookie . name);语境。响应. Cookies . add(cookie);}///summary////delete user ticket////summary public static void removeformsouthcookie(){ formsauthentication . sign out();}}第五步:测试执行
1.启动网站,输入对应的网址:如下图
2.此时,用户会在登录前跳转到登录界面,如下图所示
3.输入错误的密码会跳回登录界面并提示错误
4.输入正确的用户名和密码
5.点击用户退出会删除cookie,所以会跳转到登录界面。
源代码的下载地址。
以上就是本文的全部内容。希望对大家的学习有帮助,支持我们。
版权声明:Asp.net mvc验证用户登录之形式实现详解是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。

















