欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

ASP.NET MVC5网站开发用户登录、注销(五)

程序员文章站 2023-12-20 16:11:58
一、创建claimsidentity claimsidentity(委托基于声明的标识)是在asp.net identity身份认证系统的登录时要用到,我们在userse...

一、创建claimsidentity
claimsidentity(委托基于声明的标识)是在asp.net identity身份认证系统的登录时要用到,我们在userservice中来生成它。

1、打开ibll项目interfaceuserservice接口,添加接口方法claimsidentity createidentity(user user, string authenticationtype);

2、打开bll项目的userservice类,添加createidentity方法的实现代码

public claimsidentity createidentity(user user, string authenticationtype)
 {
 claimsidentity _identity = new claimsidentity(defaultauthenticationtypes.applicationcookie);
 _identity.addclaim(new claim(claimtypes.name, user.username));
 _identity.addclaim(new claim(claimtypes.nameidentifier, user.userid.tostring()));
 _identity.addclaim(new claim("http://schemas.microsoft.com/accesscontrolservice/2010/07/claims/identityprovider", "asp.net identity"));
 _identity.addclaim(new claim("displayname", user.displayname));
 return _identity;
 }

二、获取authenticationmanager(认证管理器)
打开ninesky.web项目 member区域的usercontroller,添加authenticationmanager属性,在httpcontext.getowincontext()中获取这个属性。

#region 属性
 private iauthenticationmanager authenticationmanager { get { return httpcontext.getowincontext().authentication; } }
 #endregion

三、创建登录视图模型
member区域的模型文件夹添加视图模型

using system.componentmodel.dataannotations;

namespace ninesky.web.areas.member.models
{
 /// <summary>
 /// 登录模型
 /// <remarks>
 /// 创建:2014.02.16
 /// </remarks>
 /// </summary>
 public class loginviewmodel
 {
 /// <summary>
 /// 用户名
 /// </summary>
 [required(errormessage = "必填")]
 [stringlength(20, minimumlength = 4, errormessage = "{2}到{1}个字符")]
 [display(name = "用户名")]
 public string username { get; set; }

 /// <summary>
 /// 密码
 /// </summary>
 [required(errormessage = "必填")]
 [display(name = "密码")]
 [stringlength(20, minimumlength = 6, errormessage = "{2}到{1}个字符")]
 [datatype(datatype.password)]
 public string password { get; set; }

 /// <summary>
 /// 记住我
 /// </summary>
 [display(name = "记住我")]
 public bool rememberme { get; set; }
 }
}

四、创建登录页面
在userccontroller中添加(string returnurl) action

/// <summary>
 /// 用户登录
 /// </summary>
 /// <param name="returnurl">返回url</param>
 /// <returns></returns>
 public actionresult login(string returnurl)
 {
 return view();
 }

右键添加强类型视图,模型为loginviewmodel

@model ninesky.web.areas.member.models.loginviewmodel

@{
 viewbag.title = "会员登录";
}

@using (html.beginform()) 
{
 @html.antiforgerytoken()
 
 <div class="form-horizontal">
 <h4>会员登录</h4>
 <hr />
 @html.validationsummary(true)

 <div class="form-group">
 @html.labelfor(model => model.username, new { @class = "control-label col-md-2" })
 <div class="col-md-10">
 @html.editorfor(model => model.username)
 @html.validationmessagefor(model => model.username)
 </div>
 </div>

 <div class="form-group">
 @html.labelfor(model => model.password, new { @class = "control-label col-md-2" })
 <div class="col-md-10">
 @html.editorfor(model => model.password)
 @html.validationmessagefor(model => model.password)
 </div>
 </div>

 <div class="form-group">
 @html.labelfor(model => model.rememberme, new { @class = "control-label col-md-2" })
 <div class="col-md-10">
 @html.editorfor(model => model.rememberme)
 @html.validationmessagefor(model => model.rememberme)
 </div>
 </div>

 <div class="form-group">
 <div class="col-md-offset-2 col-md-10">
 <input type="submit" value="登录" class="btn btn-default" />
 </div>
 </div>
 </div>
}

@section scripts {
 @scripts.render("~/bundles/jqueryval")
}

效果

ASP.NET MVC5网站开发用户登录、注销(五)

五、创建用户登录处理action
在userccontroller中添加 httppost类型的 login action中先用modelstate.isvalid看模型验证是否通过,没通过直接返回,通过则检查用户密码是否正确。用户名密码正确用createidentity方法创建标识,然后用signout方法清空cookies,然后用signin登录。

[validateantiforgerytoken]
 [httppost]
 public actionresult login(loginviewmodel loginviewmodel)
 {
 if(modelstate.isvalid)
 {
 var _user = userservice.find(loginviewmodel.username);
 if (_user == null) modelstate.addmodelerror("username", "用户名不存在");
 else if (_user.password == common.security.sha256(loginviewmodel.password))
 {
 var _identity = userservice.createidentity(_user, defaultauthenticationtypes.applicationcookie);
 authenticationmanager.signout(defaultauthenticationtypes.applicationcookie);
 authenticationmanager.signin(new authenticationproperties() { ispersistent = loginviewmodel.rememberme }, _identity);
 return redirecttoaction("index", "home");
 }
 else modelstate.addmodelerror("password", "密码错误");
 }
 return view();
 }

六、修改用户注册代码
让用户注册成功后直接登录

ASP.NET MVC5网站开发用户登录、注销(五)

七、注销
在userccontroller中添加在logout action

/// <summary>
 /// 登出
 /// </summary>
 /// <returns></returns>
 public actionresult logout()
 {
 authenticationmanager.signout(defaultauthenticationtypes.applicationcookie);
 return redirect(url.content("~/"));
 }

本文已被整理到了《asp.net mvc网站开发教程》,欢迎大家学习阅读,更多内容还可以参考asp.net mvc5网站开发专题学习。

本文主要是用到了claimsidentity(基于声明的标识)、authenticationmanager的signout、signin方法。希望对大家实现用户注册和注销有所帮助。

上一篇:

下一篇: