ASP.NET MVC5 网站开发实践(二) Member区域 - 用户部分(2)用户登录、注销

news/2024/5/9 19:27:39/文章来源:https://blog.csdn.net/dearbaba_8520/article/details/81296618
原文地址为: ASP.NET MVC5 网站开发实践(二) Member区域 - 用户部分(2)用户登录、注销

上次实现了用户注册,这次来实现用户登录,用到IAuthenticationManager的SignOut、SignIn方法和基于声明的标识。最后修改用户注册代码实现注册成功后直接登录。

目录:

ASP.NET MVC5 网站开发实践 - 概述

ASP.NET MVC5 网站开发实践(一) - 项目框架

ASP.NET MVC5 网站开发实践(一) - 框架(续) 模型、数据存储、业务逻辑

ASP.NET MVC5 网站开发实践(二) - 用户部分(1)用户注册

一、创建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")
}

 

效果

image

五、创建用户登录处理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();
}

六、修改用户注册代码

让用户注册成功后直接登录

image

七、注销

在UserCcontroller中添加在Logout action

/// <summary>
/// 登出
/// </summary>
/// <returns></returns>
public ActionResult Logout()
{
AuthenticationManager.SignOut(DefaultAuthenticationTypes.ApplicationCookie);
return Redirect(Url.Content("~/"));
}

八、总结

主要是用到了ClaimsIdentity(基于声明的标识)、AuthenticationManager的SignOut、SignIn方法。

代码 Ninesky二.2.rar:http://pan.baidu.com/s/1jGI9e66


转载请注明本文地址: ASP.NET MVC5 网站开发实践(二) Member区域 - 用户部分(2)用户登录、注销

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_764052.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

学用MVC4做网站一:用户登陆1.2

原文地址为&#xff1a; 学用MVC4做网站一:用户登陆1.2一用户 1.1用户注册 1.2用户登陆 首先在Models里添加用户登陆模型类UserLogin&#xff0c;该类只要用用户名&#xff0c;密码和验证码三个字段。 /// <summary>/// 用户登陆模型/// </summary>public class…

提升你网站水平的 jQuery 插件推荐

原文地址为&#xff1a; 提升你网站水平的 jQuery 插件推荐jQuery是一个优秀JavaScript库&#xff0c;它简化了HTML文档遍历&#xff0c;事件处理&#xff0c;动画和Ajax交互。 jQuery的确改变了很多人写JavaScript的方式。如今&#xff0c;有很多现成的jQuery插件可供选择&…

使用C#实现网站用户登录

原文地址为&#xff1a; 使用C#实现网站用户登录我们在写灌水机器人、抓资源机器人和Web网游辅助工具的时候第一步要实现的就是用户登录。那么怎么用C#来模拟一个用户的登录拉&#xff1f;要实现用户的登录&#xff0c;那么首先就必须要了解一般网站中是怎么判断用户是否登录的…

轻量服务器如何退款_wordpress程序搭建网站教程,新手小白如何搭建个人博客?...

导读&#xff1a;最近很多同学在问wordpress搭建教程因为很多的人都不会操作&#xff0c;只有学习过老课程的同学才知道&#xff0c;那么我就出一个详细的教程。(文/王听风)一.购买服务器这里我就以阿里云为列子&#xff1a;1.打开网址(https://www.aliyun.com/product/ecs)云服…

python面试题网站有哪些_扣丁学堂解析Python爬虫工程师面试题汇总

扣丁学堂解析Python爬虫工程师面试题汇总 2018-08-20 11:24:39 1664浏览 今天&#xff0c;扣丁学堂的小编来给大家总结一下Python爬虫的面试技巧&#xff0c;希望给参加Python培训的同学一点儿帮助。1、对__if__name__main的理解陈述 __name__是当前模块名&#xff0c;当模块被…

火狐(Firefox)如何移除add security exception添加的网站

如图&#xff0c;我浏览某些网站时弹出来如下框&#xff0c;为了浏览网页&#xff0c;我点了add exception—confirm security exception。现在我想移除&#xff0c;该如何操作&#xff1f; About Me ..................................................................…

web应用程序和web网站_使用推荐引擎个性化您的Web应用程序

web应用程序和web网站为了在快速发展的全球行业中保持相关性&#xff0c;技术专业人员必须跟踪IT的重大趋势&#xff0c;并找到方法将重要的趋势纳入其公司的技术产品组合中。 这样的趋势之一就是使用推荐引擎来驱动用户探索您的网站或企业的其他产品。 这些引擎根据各种模式向…

推荐16个国外的源码下载网站

本文转载自&#xff1a; https://www.cnblogs.com/lhb25/archive/2011/04/20/2013129.html 作者&#xff1a;lhb25 转载请注明该声明。如今&#xff0c;网上有很多的源代码下载网站&#xff0c;分析和学习别人的代码也是提高自己编程能力的方法之一。今天本文向大家推荐16个国…

网站建设过程中的:重要页面、关键页面、过程页面、结果页面

网站的页面类型和等级可做归类。 有些是“重要页面”&#xff0c;有些是“关键页面”&#xff0c;有些是“过程页面”&#xff0c;有些是“结果页面”。 这些根据页面存在的目的和作用分门别类。 “重要页面”和“关键页面”等级高于“过程页面”和“结果页面” 用户行为分析这…

大型网站服务器架构

QQ游戏于前几日终于突破了百万人同时在线的关口&#xff0c;向着更为远大的目标迈进&#xff0c;这让其它众多传统的棋牌休闲游戏平台黯然失色&#xff0c;相比之下&#xff0c;联众似乎已经根本不是QQ的对手&#xff0c;因为QQ除了这100万的游戏在线人数外&#xff0c;它还拥有…

大型网站系统架构分析

千万级的注册用户&#xff0c;千万级的帖子&#xff0c;nTB级的附件&#xff0c;还有巨大的日访问量&#xff0c;大型网站采用什么系统架构保证性能和稳定性&#xff1f; 首先讨论一下大型网站需要注意和考虑的问题。 数据库海量数据处理&#xff1a;负载量不大的情况下selec…

(转)网站加速--动态应用篇 (上)

--提升性能的同时为你节约10倍以上成本From: http://blog.sina.com.cn/iyangjian一, 引子二&#xff0c;总体结构图三&#xff0c;系统结构综述四&#xff0c;环境配置以及底层基础类库五, Memcache & Mysql 常用场景案例六&#xff0c;更多待续 ......-------------------…

宝塔如何备份网站_如何使用宝塔面板创建定时任务?

大家在使用宝塔面板时都可能会遇到需要使用定时任务的功能,在其进行操作网站程式时,例如文件备份、木马查杀&#xff0c;释放内存等都会用到定时任务&#xff0c;而用好定时任务功能可以使你工作效率事半功倍。而今天要教给大家的就是如何在SugarHosts云服务器上使用宝塔面板创…

网站 服务器 和 空间大小,网站服务器和空间大小

网站服务器和空间大小 内容精选换一换问题现象下载云主机文件到主机网盘&#xff0c;即下载文件到用户个人主机网盘时&#xff0c;提示下载失败错误。上传文件失败&#xff0c;提示/3.0/h5FileService/upload-403&#xff1a;服务错误&#xff0c;请稍后重试。从本地上传文件到…

寻找网页设计灵感的27个最佳网站推荐

今天&#xff0c;本文要向大家推荐的是27个寻找网页设计灵感的最佳网站。设计师们可通过这些网站收集的优秀网页设计作品来获取灵感&#xff0c;进而设计出更加时尚、更有创意的作品。如果你有收藏这个列表中遗漏的网站&#xff0c;欢迎在评论中与大家分享。 CSS Nature Design…

linux创建ftp挂载硬盘,FTP架设 - 用Ubuntu Server架设基于独立硬盘的Windows文件共享和FTP服务器_服务器应用_Linux公社-Linux系统门户网站...

之前将storage文件夹(背后是挂载的整块新硬盘)通过samba服务与Windows共享。之所以先共享&#xff0c;是为了完成FTP后方便文件管理。软件&#xff1a;vsftpd目标&#xff1a;让用户登录FTP后可以上传文件(主要用于iPhone照片备份)&#xff0c;不同用户备份在各自的文件夹下。W…

搜java题的公众号_微信公众号seo排名|搜一搜排名优化提高,公众号排名技术,专业优化公众号排名,搜一搜排名...

引流的渠道多种多样&#xff0c;有最近很热门的视频、小程序、公众号起名、菜单布局等等&#xff0c;由于渠道太多咱们无法一一讲解清楚。今天这里就以公众号长尾词文章来给大家重点介绍一下如何抓住这一块流量&#xff1f;掌握好排名规律之后无论你做哪一个平台&#xff0c;都…

服务器快照能代替网站备份吗,云服务器的快照就是备份吗

云服务器的快照就是备份吗 内容精选换一换云服务器备份有配额限制&#xff0c;且受云硬盘备份的配额限制影响&#xff0c;云服务器备份会同时占用云硬盘备份的配额。当云硬盘备份的配额不足时&#xff0c;无法进行云服务器备份。在进行云服务器备份时&#xff0c;系统会自动调整…

Node.js 推荐20多个学习网站及图书

Node.js 推荐20多个学习网站及书籍Web 开发人员对 Node.js 日益增多&#xff0c;更多的公司和开发者开始尝试使用 Node.js 来实现一些对实时性要求高&#xff0c;I/O密集型的业务。 介绍了很不错的书籍和案例&#xff0c;可以提高nodejs开发进度&#xff0c; Node.js Node 官…

网络爬虫爬取策略,注意爬虫爬取网站的频率

网络爬虫&#xff08;web crawler&#xff09;又称为网络蜘蛛&#xff08;web spider&#xff09;是一段计算机程序&#xff0c;它从互联网上按照一定的逻辑和算法抓取和下载互联网的网页,是搜索引擎的一个重要组成部分。一般的爬虫从一部分 start url开始&#xff0c;按照一定…