随便写写记录一下学习的过程

登陆

Models中添加添加

public class LoginViewModel
{
[Required(ErrorMessage = "*")]
[Display(Name = "机构号")]
public string UserName { get; set; } [Required(ErrorMessage = "*")]
[DataType(DataType.Password)]
[Display(Name = "密码")]
public string PassWord { get; set; } [Required(ErrorMessage = "*")]
[Display(Name = "验证码")]
public string Codeimg { get; set; } public string ErrorMsg { get; set; }
}

  Views代码:

其中ErrorMsg我是为了显示错误信息的,其他好的方法还不知道。。。

 @using (Html.BeginForm("Login", "Admin", new { ReturnUrl = ViewBag.ReturnUrl }, FormMethod.Post, new { @class = "form-horizontal", role = "form" }))
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
<div class="login_mid_right">
<div class="login_mid_right_ul">
<div class="form-group">
@Html.LabelFor(m => m.UserName, new { @class = "col-md-3 control-label" })
<div class="col-md-8">
@Html.TextBoxFor(m => m.UserName, new { @class = "form-control" })
</div>@Html.ValidationMessageFor(m => m.UserName)
</div>
<div class="form-group">
@Html.LabelFor(m => m.PassWord, new { @class = "col-md-3 control-label" })
<div class="col-md-8">
@Html.PasswordFor(m => m.PassWord, new { @class = "form-control" })
</div> @Html.ValidationMessageFor(m => m.PassWord)
</div>
<div class="form-group">
@Html.LabelFor(m => m.Codeimg, new { @class = "col-md-3 control-label" })
<div class="col-md-4">
@Html.TextBoxFor(m => m.Codeimg, new { @class = "form-control" }) </div> @Html.ValidationMessageFor(m => m.Codeimg)
&nbsp;&nbsp;
<img class="codeimg" title="看不清,点击刷新" alt="看不清,点击刷新" src="/Extensions/Codeimg.ashx" onclick="javascript:this.src=this.src+'?rnd=' + Math.random();" />
</div>
<div class="form-group">
<div class="col-md-offset-3 col-md-9">
<input type="submit" value="登 录" class="btn-lg btn-default" />
</div>
</div>
<div class="form-group">
<div class="col-md-offset-3 col-md-9">
@Html.ValidationMessageFor(m => m.ErrorMsg)
</div>
</div>
</div>
</div>
}

  登陆的验证,在对应的Controllers中:

public class AdminController : Controller
{
private SimonDBContext db = new SimonDBContext();
//
// GET: /Admin/
public ActionResult Index()
{
return View();
} public ActionResult Login()
{
return View();
} public ActionResult LoginOut()
{
Session.Clear();
Session.Abandon();
return RedirectToAction("Login", "Admin");
} [HttpPost]
public ActionResult Login([Bind(Include = "UserName,PassWord,Codeimg")] LoginViewModel login, string returnUrl)
{
//return View();
if (ModelState.IsValid)
{
int i = ;
if (Session["checkCode"].ToString() != login.Codeimg.ToUpper())
{
ModelState.AddModelError("ErrorMsg", "验证码不正确!");
}
else
{
i = Authentication(login.UserName, Common.Helper.Encryption.SHA256(login.PassWord));
}
if (i == )
{
//Cookie
//HttpCookie cookie = new HttpCookie("User");
//cookie.Values.Add("UserName", login.UserName);
//Response.Cookies.Add(cookie);
//Session
Session["userName"] = login.UserName;
return RedirectToAction("Index", "Admin");
}
else if (i == )
{
ModelState.AddModelError("ErrorMsg", "该用户已被禁用!");
}
else
{
ModelState.AddModelError("ErrorMsg", "密码或用户名错误!");
}
}
return View("Login");
}
/// <summary>
/// 登陆验证
/// </summary>
/// <param name="userName"></param>
/// <param name="pass"></param>
/// <returns>
/// 0:登录成功
/// 1:该用户已被禁用
/// 9:密码或用户名错误
/// </returns>
public int Authentication(string userName, string pass)
{
int res = ;
AdminManager am = db.AdminManager.SingleOrDefault(c => c.UserName == userName);
if (am == null)
{
return ;
}
if (am.Flag != "")
{
return ;
}
if (am.PassWord != pass)
{
return ;
}
return res;
}
}

做好了登陆,在其他页面就需要添加验证是否登陆,添加UserAuthorizeAttribute

public class UserAuthorizeAttribute : AuthorizeAttribute
{
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
if (httpContext == null)
{
throw new ArgumentNullException("httpContext");
}
if (HttpContext.Current.Session["userName"] == null)
{ return false;
}
return true;
}
}

在需要验证的Controller上添加 [UserAuthorize]

MVC5----用户登陆及验证码的更多相关文章

  1. 模拟Post登陆带验证码的网站

    前言: 作者在一个项目需求 模拟用户登陆,获取该用户的订单记录. 该系统需要用户名,密码,验证码 (验证码为正楷的数字4位),于是参考网络一些文章,并进行了很多测试,总结步骤如下: 步骤1 : 通过h ...

  2. PHPCMS \phpcms\modules\member\index.php 用户登陆SQL注入漏洞分析

    catalog . 漏洞描述 . 漏洞触发条件 . 漏洞影响范围 . 漏洞代码分析 . 防御方法 . 攻防思考 1. 漏洞描述2. 漏洞触发条件 0x1: POC http://localhost/p ...

  3. 一般处理程序生成简单的图片验证码并通过html验证用户输入的验证码是否正确

    一般处理程序生成简单的图片验证码并通过html验证用户输入的验证码是否正确       最近没事研究了下验证码的的动态生成及通过cookie实现HTML页面对用户输入的验证码的校验,简要如下: 1.写 ...

  4. 用户登陆,退出等基本Action

    用户登陆页面user_login.jsp对应action为login.do: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transiti ...

  5. .NET Core实战项目之CMS 第十六章 用户登录及验证码功能实现

    前面为了方便我们只是简单实现了基本业务功能的增删改查,但是登录功能还没有实现,而登录又是系统所必须的,得益于 ASP.NET Core的可扩展性因此我们很容易实现我们的登录功能.今天我将带着大家一起来 ...

  6. MVC基本登陆与验证码功能实现

    一.基本登陆实现与验证码功能实现,该功能是和spring.net功能集合使用的,因为后面要用到验证是否处于登陆状态 1. 先构建一个登陆页面 @{ Layout = null; } <!DOCT ...

  7. IOS开发之记录用户登陆状态

    上一篇博客中提到了用CoreData来进行数据的持久化,CoreData的配置和使用步骤还是挺复杂的.但熟悉CoreData的使用流程后,CoreData还是蛮好用的.今天要说的是如何记录我们用户的登 ...

  8. 使用Struts框架,实现用户登陆功能

    前言:本篇文章是本人这周学习的一个小结,在自我总结的同时,希望也能够给其他同学带来一点帮助.本文主要知识是参照书本上的知识点以及网上其他博客文章,在上机操练后的所得,具体源码主要来自http://bl ...

  9. Linux常用命令学习4---(挂载命令mount umount、用户登陆查看和用户交互命令 w who last lastlog)

    紧接着上一篇Linux的命令行的学习:Linux学习3---(文件的压缩和解压缩命令zip unzip tar.关机和重启命令shutdown reboot……) 1.挂载命令     简介      ...

  10. [PHP] - Laravel - 用户登陆中间件

    前言 Laravel 4中,可以使用Route::filter,而在Laravel 5中,没有了filter.php文件,官方建议使用中间件做. 下面是用户登陆的测试例子,涉及到的一些方法和使用,先参 ...

随机推荐

  1. 基于RealSense的坐姿检测技术

    计算机的飞速普及,让人们将越来越多的工作放在计算机上去完成,各行各业,尤其是程序开发人员.文字工作者,在计算机上的工作时间越来越长,这种情况下不良的坐姿对颈肩腰椎都会产生很大影响,容易导致多种疾病的发 ...

  2. 怎么修改路由器地址的默认IP

    参考文章:http://jingyan.baidu.com/article/4b52d7026e14effc5c774b30.html  一.怎么修改路由器地址的默认IP 目前绝大多数品牌有线或无线路 ...

  3. ADO.NET 快速入门(三):从存储过程获取输出参数

    一些存储过程通过参数返回值.当参数在SQL表达式或者存储过程中被定义为“输出”,参数值会返回给调用者.返回值存储在 OleDbCommand 或者 SqlCommand 对象的参数集合的参数里.   ...

  4. skyline TerraExplorer fly设置相对路径的方法

    软件环境:TerraExplorer Pro(以下简称TEP)6.5 在TEP中,对于本地(非网络)文件路径,默认都是绝对路径,在移动数据时非常麻烦,以下是本人总结出一些设置相对路径的规则 假设fly ...

  5. C++ XML解析之TinyXML篇[转]

    最 近使用TinyXML进行C++ XML解析,感觉使用起来比较简单,很容易上手,本文给出一个使用TinyXML进行XML解析的简单例子,很多复杂的应用都可以基于本例子的方法来完 成.以后的文章里会讲 ...

  6. iOS开发——设备篇Swift篇&判断设备类型

    判断设备类型   1,分割视图控制器(UISplitViewController) 在iPhone应用中,使用导航控制器由上一层界面进入下一层界面. 但iPad屏幕较大,通常使用SplitViewCo ...

  7. android140 360 黑名单 启动service和分页加载

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout ...

  8. mysql 日期函数格式

    mysql中的from_unixtime函数的format表达式字段描述: %M 月名字(January……December) %W 星期名字(Sunday……Saturday)  %D 有英语前缀的 ...

  9. Sublime Text 3 常用快捷键总结

    1.快速跳转到某一行:Ctrl+G,输入行号,可以快速跳转到该行 2.快速查找:Ctrl+P 输入"@函数名"可以快速查找到函数 输入"#+文本" 3.多行游标 ...

  10. bash中的数值运算

    第一种,使用((表达式)): a=3 ((b=a+2)) echo $b 第二种使用let: let "c=$a+4" echo $c 第三种,使用expr表达式(注意空格不能少) ...