1、View:获取用户登录数据
2、 对应的Controller中:
public ActionResult AjaxAuthorizeUser(string tel, string num, string innum)
{
var telephone = tel ?? "";
var numbers = num ?? "";
var innumbers = innum ?? "";
ViewBag.txtNum = numbers;
ViewBag.txtTel = telephone;
var success = false;
if (tel != "" && numbers != "" && innumbers != "")
{
if (innumbers == numbers)
{
var datenow = DateTime.Now;
var datexpires = datenow.AddDays(1);
//查看是否有该用户
var user = UserDal.F_User_GetMemberInforByTel(tel);
//某有则去创建
if (user == null)
{
int isCreate = UserDal.F_User_CreateClient_ByTel(tel);
user = UserDal.F_User_GetMemberInforByTel(tel);
}
//获取相关用户信息,保存至cookie中
//1、生成票据
var ticket = new FormsAuthenticationTicket(
1,
user.Id.ToString(CultureInfo.InvariantCulture) + ":" + user.ClientName,
datenow,
datexpires,
false,
// user.RoleName.ToString(CultureInfo.InvariantCulture)
"clients" /*这里用上面准备好的用逗号分割的role字符串,此处简化为已client为例,
使用时仅需在相关页面上添加 [Authorize(Roles = "clients")] 即可*/
);
//2、加密票据并生成Cookie
var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, FormsAuthentication.Encrypt(ticket))
{
Expires = datexpires
};
//3、将身份验证票据Cookie输出到客户端
Response.Cookies.Add(cookie);
success = true;
}
}
return Content(JsonConvert.SerializeObject(new
{
return_code = 0,
success
}));
}
3、web.config文件中:
<authentication mode="Forms">
<forms loginUrl="~/Account/Login" timeout="2880" />
</authentication>
4、Global.asax中:
protected void Application_AuthorizeRequest(object sender, System.EventArgs e)
{
HttpApplication App = (HttpApplication)sender;
HttpContext Ctx = App.Context; //获取本次Http请求相关的HttpContext对象
if (Ctx.Request.IsAuthenticated == true) //验证过的用户才进行role的处理
{
FormsIdentity Id = (FormsIdentity)Ctx.User.Identity;
FormsAuthenticationTicket Ticket = Id.Ticket; //取得身份验证票
string[] Roles = Ticket.UserData.Split(','); //将身份验证票中的role数据转成字符串数组
Ctx.User = new GenericPrincipal(Id, Roles); //将原有的Identity加上角色信息新建一个GenericPrincipal表示当前用户,这样当前用户就拥有了role信息
}
}
或者
protected void Application_AuthenticateRequest(Object sender, EventArgs e)
{
HttpCookie authCookie = Context.Request.Cookies[FormsAuthentication.FormsCookieName];
if (authCookie == null || authCookie.Value == "")
{
return;
}
FormsAuthenticationTicket authTicket = null;
try
{
authTicket = FormsAuthentication.Decrypt(authCookie.Value);
}
catch
{
return;
}
string[] roles = authTicket.UserData.Split(new char[] { ';' });
if (Context.User != null)
{
Context.User = new System.Security.Principal.GenericPrincipal(Context.User.Identity, roles);
}
} 均可。
P.S. 本篇文章最好结合上一篇文章对比去学习。
上一篇文章里有详细的参数及概念的讲解,本文为实际操作为主。