Form Authentication
1.创建登陆的控制器和视图,实现登陆基本功能
2.创建视图模型,并在Action里面引用。
3.创建一个接口两个类,那个IUserPricipal接口要实现IPrincipal接口,UserPricipal类需要继承这个接口,然后去初始化IIdentity这个接口,UserPricipalModel类则是返回用户输出的Cookie的数据模型。
具体代码:
两个类一个接口:
interface ICustomPrincipal : IPrincipal
{
UserViewModel User { get; set; }
}
public class CustomPriceipal : ICustomPrincipal
{
public IIdentity Identity { get; private set; }
public bool IsInRole(string role)
{
return false;
}
public CustomPriceipal(string email)
{
this.Identity = new GenericIdentity(email);
}
public bool IsAdmin { get; set; } = false;
public string UserName { get; set; }
public UserViewModel User { get; set; }
}
public class CustomPrincipalSerializeModel
{
public string UserName { get; set; }
public bool IsAdmin { get; set; }
public UserViewModel User { get; set; }
}
Action代码 :
[HttpPost]
public ActionResult Login(UserViewModel model)
{
if (model.Password == "" || model.UserName == "")
{
return View(model);
}
CustomPrincipalSerializeModel serializeModel = new CustomPrincipalSerializeModel();
JavaScriptSerializer serializer = new JavaScriptSerializer();
serializeModel.User = model;
serializeModel.UserName = model.UserName;
string userData = serializer.Serialize(serializeModel);
var ticket = new FormsAuthenticationTicket(2, model.UserName, DateTime.Now, DateTime.Now.AddMinutes(1), false, userData);
string encryptTickey = FormsAuthentication.Encrypt(ticket);
HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName,encryptTickey);
Response.Cookies.Remove(cookie.Name);
Response.Cookies.Add(cookie);
return Redirect("/Home/Index");
}
Global文件代码:
protected void Application_PostAuthenticateRequest(Object sender, EventArgs e)
{
HttpCookie cookie = Request.Cookies[FormsAuthentication.FormsCookieName];
if(cookie!=null)
{
FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(cookie.Value);
if (ticket != null && !string.IsNullOrEmpty(ticket.UserData))
{
JavaScriptSerializer serializer = new JavaScriptSerializer();
CustomPrincipalSerializeModel serializeModel = serializer.Deserialize<CustomPrincipalSerializeModel>(ticket.UserData);
CustomPriceipal newUser = new CustomPriceipal(ticket.Name);
newUser.User = serializeModel.User;
newUser.UserName = serializeModel.UserName;
newUser.IsAdmin = serializeModel.IsAdmin;
HttpContext.Current.User = newUser;
}
}
}
Form Authentication的更多相关文章
- ASP.NET MVC:Form Authentication 相关的学习资源
看完此图就懂了 看完下面文章必须精通 Form authentication and authorization in ASP.NET Explained: Forms Authentication ...
- Web验证方式(2)--Form Authentication
Form验证方式并不是HTTP标准,而是在微软ASP.NET Web框架下提供的一种验证方式.其大致流程如下: 在上图的流程中,ASP.NET框架提供了如下支持类:( FormsAuthenticat ...
- Asp.net Web Api 2 FORM Authentication Demo
最近看了一点 web api 2方面的书,对认证都是简单介绍了下,所以我在这里做个简单Demo,本文主要是FORM Authentication,顺带把基本认证也讲了. Demo 一.FORM Aut ...
- SharePoint 2010 Form Authentication (SQL) based on existing database
SharePoint 2010 表单认证,基于现有数据库的用户信息表 本文主要描写叙述本人配置过程中涉及到的步骤,仅作为參考,不要仅限于此步骤. 另外本文通俗易懂,适合大众口味儿. I. 开启并配置基 ...
- Form authentication(表单认证)问题
前言 最近在做ASP.NET MVC中表单认证时出了一些问题,特此记录. 问题 进行表单认证时,在 PostAuthenticateRequest 事件中从Cookie值中解密票据.如下: prote ...
- 关于ASP.NET MVC中Form Authentication与Windows Authentication的简单理解
一般互联网应用,如人人网,微博,都是需要用户登录的,如果用户不登陆,就不能使用此网站.所以,这里都是用FormAuthentication,要求用户填写用户名与密码,然后登录成功后,FormAuthe ...
- 升级framework4.0后form认证票据失效的问题
好久没来了,密码都差点忘了,顺便记录下今天配置环境碰到的小问题 网站使用的form authentication做SSO登录,登录域名使用的framework20配置环境 一个栏目升级为4.0环境后, ...
- [转]OData and Authentication – Part 5 – Custom HttpModules
本文转自:https://blogs.msdn.microsoft.com/odatateam/2010/07/19/odata-and-authentication-part-5-custom-ht ...
- rest-assured之认证授权(Authentication)
rest-assured支持多种认证授权方案,比如:OAuth.digest(摘要认证).certificate(证书认证).form(表单认证)以及preemptive(抢占式基础认证)等.我们可以 ...
随机推荐
- windows 安装 mysql5.7.17
下载mysql 进入官网:https://www.mysql.com/ 单击[Downloads]选项卡 最下面有个[ MySQL Community Edition (GPL)],单击[Commu ...
- CodeForces 540A Combination Lock (水题)
题意:给定一个串数,表示一种密码锁,再给定一串密码,问你滑动最少的次数,把第一行变成第二行. 析:很简单么,反正只有0-9这个10个数字,那么就是把每一个数从正着滑和倒着滑中找出一个最小的即可,正着滑 ...
- MVC4 基于 Unity Ioc 框架的 ControllerFactory
首先引入Untiy框架. 可以在NuGet程序包 管理器中直接安装. 新建 继承DefaultControllerFactory 的UnityControllerFactory: 重写虚方法GetC ...
- Verilog MIPS32 CPU(五)-- CP0
Verilog MIPS32 CPU(一)-- PC寄存器 Verilog MIPS32 CPU(二)-- Regfiles Verilog MIPS32 CPU(三)-- ALU Verilog M ...
- CS0012 类型“DbContext”在未引用的程序集中定义。必须添加对程序集“EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”的引用。 Repository E:\项目\wx\Repository\DbContextFac
严重性 代码 说明 项目 文件 行 禁止显示状态错误 CS0012 类型“DbContext”在未引用的程序集中定义.必须添加对程序集“EntityFramework, Version=6.0.0.0 ...
- typescript多维对象数组仿List泛型
定义对象: namespace entity{ export class MyClass{ public value:number; public rect:string; public constr ...
- leetcode 反转字符串
请编写一个函数,其功能是将输入的字符串反转过来. 示例: 输入:s = "hello" 返回:"olleh" /** * @param {string} s * ...
- docker swarm 命令
初始化swarm manager并制定网卡地址 docker swarm init --advertise-addr 192.168.10.117 强制删除集群,如果是manager,需要加–forc ...
- redis安装 卸载 启动 关闭
一 redis安装 第一步:在VMware中安装CentOS(参考Linux教程中的安装虚拟机) 第二步:在Linux下安装gcc环境 [root@hadoop ~]#yum install gcc- ...
- javascript小数求整
Math.ceil(arg) 返回一个比参数arg大的整数 Math.floor(arg) 返回一个比参数arg小的整数 Math.round(arg) 返回一个参数arg四舍五入的后的整数 pars ...