// Services.UserLoginHelper
using System;
using System.Linq;
using System.Text;
using System.Web;
using System.Web.Security;
using Models;
using Models.ModelItems;
using Models.View;
using Services.Cache;
using Services.Extensions;
using Services.Manager;
using Services.Tool;
public class UserLoginHelper
{
private static string CookieName_User = (ConfigHelper.GetConfigString("DBName") + "_UserInfo").ToMD5();
private static string CookieName_Token = (ConfigHelper.GetConfigString("DBName") + "_TokenInfo").ToMD5();
///
/// ....
///
///
public static View_UserInfo CurrentUser()
{
View_UserInfo user = HttpContext.Current.Session[CookieName_User] as View_UserInfo;
if (user != null && CacheHelp.cacheSysUserInfo.FirstOrDefault(a => a.Pwd == user.Pwd && a.Uid == user.Uid && a.IsValid >=2 ) != null)
{
Logs.WriteLog("user值" + user.Uid);
return user;
}
if (HttpContext.Current.Session["ras"] != null && HttpContext.Current.Request.Cookies[CookieName_User] != null && HttpContext.Current.Request.Cookies[CookieName_Token] != null)
{
RSA rSA = HttpContext.Current.Session["ras"] as RSA;
string keyword = HttpUtility.UrlDecode(HttpContext.Current.Request.Cookies[CookieName_User].Value).Trim().ToLower();
Logs.WriteLog("keyword" + keyword);
string value = HttpUtility.UrlDecode(HttpContext.Current.Request.Cookies[CookieName_Token].Value);
Logs.WriteLog("value"+value);
string pwd = (string.IsNullOrEmpty(rSA.DecodeOrNull(value)) ? "" : rSA.DecodeOrNull(value));
View_UserInfo view_UserInfo = CacheHelp.cacheSysUserInfo.First(a => a.Uid == keyword);
UserInfo usernew = new UserInfo() { Uid = keyword.Trim().ToLower(), Pwd = pwd, CreateTime = view_UserInfo.CreateTime };
usernew = usernew.ComputePasswordHash();
if (view_UserInfo == null || view_UserInfo.Pwd != usernew.Pwd || view_UserInfo.IsValid == 1)
{
return null;
}
else
{
Logs.WriteLog("view_UserInfo" + view_UserInfo);
return view_UserInfo;
}
}
return null;
}
public static UserInfo CurrentUserAsync(HttpContext context)
{
//未使用 不可用
UserInfo userInfo = context.Session[CookieName_User] as UserInfo;
if (userInfo != null)
{
return userInfo;
}
if (context.Request.Cookies[CookieName_User] != null && context.Request.Cookies[CookieName_Token] != null)
{
RSA rSA = HttpContext.Current.Session["ras"] as RSA;
string keyword = context.Request.Cookies[CookieName_User].Value;
string pwd = (string.IsNullOrEmpty(rSA.DecodeOrNull(context.Request.Cookies[CookieName_Token].Value)) ? "" : rSA.DecodeOrNull(context.Request.Cookies[CookieName_Token].Value));
var user = SqlSugarBase.Db.Queryable().First(x => x.Uid == keyword.Trim());
UserInfo usernew = user.Clones();
usernew.Pwd = pwd;
usernew = usernew.ComputePasswordHash();
return user;
}
return null;
}
public static View_UserInfo GetUserLoginBy(string keyword, string password, int tYPE = 0)
{
string pwd = password;
if (tYPE == 0) {
RSA rSA = HttpContext.Current.Session["ras"] as RSA;
if (rSA == null)
{
throw new CustomException("秘钥过期,请刷新界面!");
}
UserLogout();
if (string.IsNullOrEmpty(rSA.DecodeOrNull(password)))
{
throw new CustomException("秘钥过期,请刷新界面!");
}
pwd = rSA.DecodeOrNull(password);
}
keyword = keyword.Trim().ToLower();
View_UserInfo view_UserInfo = CacheHelp.cacheSysUserInfo.FirstOrDefault( a => a.Uid.Trim().ToLower() == keyword);
if (view_UserInfo == null)
{
throw new CustomException("账号密码有误!");
}
UserInfo usernew = new UserInfo() { Uid = keyword.Trim(), Pwd = pwd, CreateTime = view_UserInfo == null ? DateTime.Now : view_UserInfo.CreateTime };
usernew = usernew.ComputePasswordHash();
string str = usernew.HashCode(view_UserInfo.Uid.ToUpper() + pwd +( view_UserInfo == null ? DateTime.Now : view_UserInfo.CreateTime).ToString("yyyy-MM-dd HH:mm:ss"));
if (view_UserInfo == null || usernew.Pwd != view_UserInfo.Pwd)
{
throw new CustomException("账号密码有误!");
}
if (view_UserInfo.IsValid == 1)
throw new CustomException("账号冻结!");
else
{
if (view_UserInfo.IsValid < 2)
throw new CustomException("禁止访问!");
}
HttpContext.Current.Session[CookieName_User] = view_UserInfo;
CookieExtensions.WriteCookie(CookieName_User, HttpUtility.UrlEncode(keyword, Encoding.GetEncoding("UTF-8")), 60);
CookieExtensions.WriteCookie(CookieName_Token, HttpUtility.UrlEncode(password, Encoding.GetEncoding("UTF-8")), 60);
return view_UserInfo;
}
public static void UserLogout()
{
if (CheckUserLogin())
{
string name = HttpContext.Current.User.Identity.Name;
FormsAuthentication.SignOut();
RemoveUser(name);
}
}
public static void RemoveUser(string ID)
{
HttpContext.Current.Session.Clear();//删除所有Session
//HttpContext.Current.Response.Cookies.Clear();//删除所有Cookies
HttpCookie httpCookie = HttpContext.Current.Request.Cookies[CookieName_User];
httpCookie.Expires = DateTime.Now.AddDays(-1.0);
HttpContext.Current.Response.Cookies.Add(httpCookie);
HttpCookie httpCookie2 = HttpContext.Current.Request.Cookies[CookieName_Token];
httpCookie2.Expires = DateTime.Now.AddDays(-1.0);
HttpContext.Current.Response.Cookies.Add(httpCookie2);
}
public static bool CheckUserLogin()
{
try
{
if (HttpContext.Current.Request.Cookies[CookieName_User] != null && HttpContext.Current.Request.Cookies[CookieName_Token] != null)
{
string keyword = HttpUtility.UrlDecode(HttpContext.Current.Request.Cookies[CookieName_User].Value);
RSA rSA = HttpContext.Current.Session["ras"] as RSA ?? throw new CustomException("ras解析出错~");
string pwd = (string.IsNullOrEmpty(rSA.DecodeOrNull(HttpUtility.UrlDecode(HttpContext.Current.Request.Cookies[CookieName_Token].Value))) ? "" : rSA.DecodeOrNull(HttpUtility.UrlDecode(HttpContext.Current.Request.Cookies[CookieName_Token].Value)));
View_UserInfo view_UserInfo = CacheHelp.cacheSysUserInfo.Single((View_UserInfo a) => a.Uid == keyword);
UserInfo usernew = new UserInfo() { Uid = keyword.Trim(), Pwd = pwd, CreateTime = view_UserInfo == null ? DateTime.Now : view_UserInfo.CreateTime };
usernew = usernew.ComputePasswordHash();
if (view_UserInfo == null || view_UserInfo.Pwd != usernew.Pwd)
return false;
else
return true;
}
return false;
}
catch (Exception ex)
{
Logs.WriteLog("进入退出报错"+ ex.Message);
return false;
}
}
}