c# 获取用户IP4

发布时间:2024年01月22日

using System;
using Microsoft.AspNetCore.Mvc;
using Sys.Model;
using Sys.Dao;
using Sys.Tools;
using Microsoft.AspNetCore.Http;
using System.Text;
using System.Collections.Generic;
using Microsoft.IdentityModel.Tokens;
using System.IdentityModel.Tokens.Jwt;
using System.Security.Claims;
using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Authentication.Cookies;
using System.Threading.Tasks;
using Newtonsoft.Json;
using Sys.Tools.Session;

namespace HBAnalysisSystem.Controllers
{
? ? public class LoginController : Controller
? ? {
? ? ? ? public const string UserKey = BaseController.UserKey;
? ? ? ? private IHttpContextAccessor _accessor;
? ? ? ? public LoginController(IHttpContextAccessor accessor)
? ? ? ? {
? ? ? ? ? ? _accessor = accessor;
? ? ? ? }
? ? ? ? //
? ? ? ? // GET: /SystemManagement/
? ? ? ? // [RoleFilte
? ? ? ? // r(IsCheck = false)]
? ? ? ? //string u_danger, string p_danger, string c_danger, string returnUrl = null
? ? ? ? public IActionResult Index()
? ? ? ? {
? ? ? ??
? ? ? ? ? ? return View();

? ? ? ? }


? ? ? ? /// <summary>
? ? ? ? /// 校验登录
? ? ? ? /// </summary>
? ? ? ? /// <param name="model"></param>
? ? ? ? /// <returns></returns>
? ? ? ? /// <summary>
? ? ? ? /// 校验登录
? ? ? ? /// </summary>
? ? ? ? /// <param name="model"></param>
? ? ? ? /// <returns></returns>
? ? ? ? //public async Task<IActionResult> CheckLogin(string userName, string password,string authCode, string verifyCode)
? ? ? ? //{

? ? ? ? // ? ?if (string.IsNullOrEmpty(authCode))
? ? ? ? // ? ?{
? ? ? ? // ? ? ? ?//ViewData["c_danger"] = "验证码不能为空";
? ? ? ? // ? ? ? ?return RedirectToAction("Index", "Login", new { c_danger = "验证码不能为空" });
? ? ? ? // ? ?}
? ? ? ? // ? ?else
? ? ? ? // ? ?{
? ? ? ? // ? ? ? ?authCode = EncryptUtil.MD5Password("V_" + authCode).ToLower();
? ? ? ? // ? ? ? ?if (authCode != verifyCode)
? ? ? ? // ? ? ? ?{
? ? ? ? // ? ? ? ? ? ?//ViewData["c_danger"] = "验证码错误";
? ? ? ? // ? ? ? ? ? ?return RedirectToAction("Index", "Login", new { c_danger = "验证码错误" });
? ? ? ? // ? ? ? ?}
? ? ? ? // ? ?}
? ? ? ? // ? ?if (string.IsNullOrEmpty(userName))
? ? ? ? // ? ?{

? ? ? ? // ? ? ? ?return RedirectToAction("Index", "Login", new { u_danger = "用户名不能为空" });

? ? ? ? // ? ? ? ?//return;
? ? ? ? // ? ?}
? ? ? ? // ? ?else if (string.IsNullOrEmpty(password))
? ? ? ? // ? ?{

? ? ? ? // ? ? ? ?return RedirectToAction("Index", "Login", new { p_danger = "密码不能为空" });

? ? ? ? // ? ? ? ?//return;
? ? ? ? // ? ?}
??
? ? ? ? // ? ?//1.先Base64位解密
? ? ? ? // ? ?password = Base64Provider.Base64Decode(password);
? ? ? ? // ? ?string message = RegProvider.IsEngName("密码", password);
? ? ? ? // ? ?if (!string.IsNullOrEmpty(message))
? ? ? ? // ? ?{
? ? ? ? // ? ? ? ?//await Response.WriteAsync("<script>alert('密码只能包含数字、字母或下划线等');window.location.href ='/Login/Index'</script>");
? ? ? ? // ? ? ? ?//ViewData["p_danger"] = "密码只能包含数字、字母或下划线等";

? ? ? ? // ? ? ? ?return RedirectToAction("Index", "Login", new { p_danger = "密码只能包含数字、字母或下划线等" });

? ? ? ? // ? ? ? ?//return;
? ? ? ? // ? ?}
? ? ? ? // ? ?try
? ? ? ? // ? ?{
? ? ? ? // ? ? ? ?Usr _usermodel = Sys_UsrDao.Instance.GetUser(userName);
? ? ? ? // ? ? ? ?//如果次数操作3次,且错误时间间隔小于超过15分钟,返回用户锁定
? ? ? ? // ? ? ? ?if (_usermodel != null)
? ? ? ? // ? ? ? ?{
? ? ? ? // ? ? ? ? ? ?if (_usermodel.ErrorNum >= 3 && (DateTime.Now.Subtract(Convert.ToDateTime(_usermodel.ErrorLoginTime)).Minutes <= 15))
? ? ? ? // ? ? ? ? ? ?{
? ? ? ? // ? ? ? ? ? ? ? ?//await Response.WriteAsync("<script>alert('用户已锁定!');window.location.href ='/Login/Index'</script>");
? ? ? ? // ? ? ? ? ? ? ? ?//ViewData["u_danger"] = "用户已锁定";

? ? ? ? // ? ? ? ? ? ? ? ?return RedirectToAction("Index", "Login", new { u_danger = "用户已锁定" });

? ? ? ? // ? ? ? ? ? ? ? ?//return;
? ? ? ? // ? ? ? ? ? ?}
? ? ? ? // ? ? ? ?}
? ? ? ? // ? ? ? ?else
? ? ? ? // ? ? ? ?{
? ? ? ? // ? ? ? ? ? ?//await Response.WriteAsync("<script>alert('用户不存在!');window.location.href ='/Login/Index'</script>");
? ? ? ? // ? ? ? ? ? ?//ViewData["u_danger"] = "用户不存在";


? ? ? ? // ? ? ? ? ? ?return RedirectToAction("Index", "Login", new { u_danger = "用户不存在" });

? ? ? ? // ? ? ? ? ? ?//return;
? ? ? ? // ? ? ? ?}
? ? ? ? // ? ? ? ?//2.MD5加密
? ? ? ? // ? ? ? ?password = EncryptUtil.MD5Password(password).ToLower();
? ? ? ? // ? ? ? ?Usr user = Sys_UsrDao.Instance.GetUser(userName, password);
? ? ? ? // ? ? ? ?if (user != null && user.Id >= 0 && user.IsRun == true)
? ? ? ? // ? ? ? ?{
? ? ? ? // ? ? ? ? ? ?user.ErrorNum = 0;
? ? ? ? // ? ? ? ? ? ?Sys_UsrDao.Instance.Update(user);
? ? ? ? // ? ? ? ? ? ?if (user.UserType == 2)
? ? ? ? // ? ? ? ? ? ?{
? ? ? ? // ? ? ? ? ? ? ? ?if (user.UseDate < Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd")))
? ? ? ? // ? ? ? ? ? ? ? ?{
? ? ? ? // ? ? ? ? ? ? ? ? ? ?//await Response.WriteAsync("<script>alert('用户访问权限已到期!');window.location.href ='/Login/Index'</script>");
? ? ? ? // ? ? ? ? ? ? ? ? ? ?ViewData["u_danger"] = "用户访问权限已到期";

? ? ? ? // ? ? ? ? ? ? ? ? ? ?return RedirectToAction("Index", "Login", new { u_danger = "用户访问权限已到期" });

? ? ? ? // ? ? ? ? ? ? ? ?}
? ? ? ? // ? ? ? ? ? ?}
? ? ? ? // ? ? ? ? ? ?UserModel model = new UserModel();
? ? ? ? // ? ? ? ? ? ?model.UserId = user.Id;
? ? ? ? // ? ? ? ? ? ?model.LoginName = user.Name;
? ? ? ? // ? ? ? ? ? ?model.Password = password;
? ? ? ? // ? ? ? ? ? ?model.UserName = user.RealName;
? ? ? ? // ? ? ? ? ? ?model.IsAdmin = ConvertHelper.FormatDBInt(user.IsAdmin);
? ? ? ? // ? ? ? ? ? ?model.SessionId = Guid.NewGuid().ToString();
? ? ? ? // ? ? ? ? ? ?model.GroupID = ConvertHelper.FormatDBInt(user.GroupID);
? ? ? ? // ? ? ? ? ? ?model.HigherName = user.HigherName;
? ? ? ? // ? ? ? ? ? ?if (model.IsAdmin == 1)
? ? ? ? // ? ? ? ? ? ?{
? ? ? ? // ? ? ? ? ? ? ? ?model.UserType = AuditRoleType.Admin;
? ? ? ? // ? ? ? ? ? ?}
? ? ? ? // ? ? ? ? ? ?else
? ? ? ? // ? ? ? ? ? ?{
? ? ? ? // ? ? ? ? ? ? ? ?model.UserType = Sys_UsrDao.Instance.GetUserType(user.Name);
? ? ? ? // ? ? ? ? ? ?}
? ? ? ? ? ? ? ? ? ?
? ? ? ? // ? ? ? ? ? ?string info = JsonHelper.SerializeObject(model);
? ? ? ? ? ? ? ?
? ? ? ? // ? ? ? ? ? ?var claims = new List<Claim>() {
? ? ? ? // ? ? ? ? ? ? ? new Claim(ClaimTypes.Name,model.LoginName),
? ? ? ? // ? ? ? ? ? ? ? new Claim(ClaimTypes.UserData,info),
? ? ? ? // ? ? ? ? ? ?};
? ? ? ? // ? ? ? ? ? ?var idendity = new ClaimsIdentity(claims, CookieAuthenticationDefaults.AuthenticationScheme);
? ? ? ? // ? ? ? ? ? ?var userPrincipal = new ClaimsPrincipal(idendity);
? ? ? ? // ? ? ? ? ? ?await _accessor.HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, userPrincipal, new AuthenticationProperties
? ? ? ? // ? ? ? ? ? ?{
? ? ? ? // ? ? ? ? ? ? ? ?ExpiresUtc = DateTime.UtcNow.AddDays(1),
? ? ? ? // ? ? ? ? ? ? ? ?IsPersistent = false,
? ? ? ? // ? ? ? ? ? ? ? ?AllowRefresh = false
? ? ? ? // ? ? ? ? ? ?});
? ? ? ? // ? ? ? ? ? ?var expres = DateTime.Now.AddDays(1);
? ? ? ? // ? ? ? ? ? ?var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(ConfigurationManager.GetSection("Authentication:SecurityKey")));
? ? ? ? // ? ? ? ? ? ?var token = new JwtSecurityToken(
? ? ? ? // ? ? ? ? ? ? ? ? ? ?issuer: ConfigurationManager.GetSection("Authentication:Issure"), ? ? ? ? ? // 发布者
? ? ? ? // ? ? ? ? ? ? ? ? ? ?audience: ConfigurationManager.GetSection("Authentication:Audience"), ? ? ? ? ?// 接收者
? ? ? ? // ? ? ? ? ? ? ? ? ? ?notBefore: DateTime.Now, ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?// token签发时间
? ? ? ? // ? ? ? ? ? ? ? ? ? ?expires: expres, ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? // token过期时间
? ? ? ? // ? ? ? ? ? ? ? ? ? ?claims: claims, ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? // 该token内存储的自定义字段信息
? ? ? ? // ? ? ? ? ? ? ? ? ? ?signingCredentials: new SigningCredentials(key, SecurityAlgorithms.HmacSha256) ? ?// 用于签发token的秘钥算法
? ? ? ? // ? ? ? ? ? ? ? ? ? ?);
? ? ? ? // ? ? ? ? ? ?// 返回成功信息,写出token ? ? ? ? ? ? ? ? ?
? ? ? ? // ? ? ? ? ? ?model.Token = new JwtSecurityTokenHandler().WriteToken(token);
? ? ? ? // ? ? ? ? ? ?//HttpContext.GetTokenAsync(key);
? ? ? ? // ? ? ? ? ? ?//写入登录日志
? ? ? ? // ? ? ? ? ? ?WelcomLogs log = new WelcomLogs();
? ? ? ? // ? ? ? ? ? ?log.Id = Sys_UsrDao.Instance.GetMaxId<WelcomLogs>();
? ? ? ? // ? ? ? ? ? ?log.Action = "系统登录";
? ? ? ? // ? ? ? ? ? ?log.UsrName = userName;
? ? ? ? // ? ? ? ? ? ?log.ActionDate = System.DateTime.Now;
? ? ? ? // ? ? ? ? ? ?try
? ? ? ? // ? ? ? ? ? ?{
? ? ? ? // ? ? ? ? ? ? ? ?string ips = _accessor.HttpContext.Connection.RemoteIpAddress.MapToIPv4().ToString();
? ? ? ? // ? ? ? ? ? ? ? ?log.UserIp = ips;
? ? ? ? // ? ? ? ? ? ?}
? ? ? ? // ? ? ? ? ? ?catch (Exception ex)
? ? ? ? // ? ? ? ? ? ?{

? ? ? ? // ? ? ? ? ? ?}
? ? ? ? // ? ? ? ? ? ?Sys_UsrDao.Instance.Insert<WelcomLogs>(log);
? ? ? ? // ? ? ? ? ? ?//Response.WriteAsync("<script>window.location.href ='/Home/Index'</script>");
? ? ? ? // ? ? ? ? ? ?//RedirectToAction("Index", "Home");
? ? ? ? // ? ? ? ? ? ?//判断是否是新用户,是新用户弹出密码修改界面,修改之后改成旧用户
? ? ? ? // ? ? ? ? ? ?if (user.IsNewUser == true)
? ? ? ? // ? ? ? ? ? ?{
? ? ? ? // ? ? ? ? ? ? ? ?//Response.Redirect("/SysManagement/ChangePassword", true);
? ? ? ? // ? ? ? ? ? ? ? ?return RedirectToAction("ChangePassword", "SysManagement");
? ? ? ? // ? ? ? ? ? ?}
? ? ? ? // ? ? ? ? ? ?else
? ? ? ? // ? ? ? ? ? ?{


? ? ? ? // ? ? ? ? ? ? ? ?//return RedirectToAction("JSCYTHIndex1", "Cockpit");
? ? ? ? // ? ? ? ? ? ? ? ?return RedirectToAction("FlyToEarth", "Cockpit");
? ? ? ? // ? ? ? ? ? ?}

? ? ? ? // ? ? ? ?}
? ? ? ? // ? ? ? ?else
? ? ? ? // ? ? ? ?{
? ? ? ? // ? ? ? ? ? ?_usermodel.ErrorNum = _usermodel.ErrorNum == null ? 1 : _usermodel.ErrorNum + 1;
? ? ? ? // ? ? ? ? ? ?_usermodel.ErrorLoginTime = DateTime.Now;
? ? ? ? // ? ? ? ? ? ?Sys_UsrDao.Instance.Update(_usermodel);
? ? ? ? // ? ? ? ? ? ?//CookiesHelper.ClearCookie(UserKey);
? ? ? ? // ? ? ? ? ? ?//SessionManager.Instance.RemoveSession(UserKey);
? ? ? ? // ? ? ? ? ? ?// return "账号或密码有误";
? ? ? ? // ? ? ? ? ? ?//await Response.WriteAsync("<script>alert('账号或密码有误');window.location.href ='/Login/Index'</script>", Encoding.GetEncoding("GB2312"));
? ? ? ? // ? ? ? ? ? ?//ViewData["p_danger"] = "账号或密码有误";

? ? ? ? // ? ? ? ? ? ?return RedirectToAction("Index", "Login", new { p_danger = "账号或密码有误" });


? ? ? ? // ? ? ? ? ? ?//return;
? ? ? ? // ? ? ? ?}
? ? ? ? // ? ?}
? ? ? ? // ? ?catch (System.Exception ex)
? ? ? ? // ? ?{
? ? ? ? // ? ? ? ?Log4Helper.Error("登录失败" + ex.ToString());
? ? ? ? // ? ? ? ?//await Response.WriteAsync("<script>alert('登录失败,请确认账号和密码正确');window.location.href ='/Login/Index'</script>");
? ? ? ? // ? ? ? ?//ViewData["p_danger"] = "登录失败,"+ ex.Message;

? ? ? ? // ? ? ? ?return RedirectToAction("Index", "Login", new { u_danger = "登录失败,请联系管理员" ?});

? ? ? ? // ? ?}
? ? ? ? //}

? ? ? ? public async Task<IActionResult> CheckLogin(string userName, string password, string authCode, string verifyCode)
? ? ? ? {
? ? ? ? ? ? try
? ? ? ? ? ? {

? ? ? ? ? ? ??
? ? ? ? ? ? ? ? //1.先Base64位解密
? ? ? ? ? ? ? ? password = Base64Provider.Base64Decode(password);
? ? ? ?
? ? ? ? ? ? ? ? //2.MD5加密
? ? ? ? ? ? ? ? password = EncryptUtil.MD5Password(password).ToLower();

? ? ? ? ? ? ? ? Usr user = Sys_UsrDao.Instance.GetUser(userName, password);
? ? ? ? ? ? ? ? if (user != null && user.Id >= 0 && user.IsRun == true)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? user.ErrorNum = 0;
? ? ? ? ? ? ? ? ? ? Sys_UsrDao.Instance.Update(user);
? ? ? ? ? ? ? ? ? ? UserModel model = new UserModel();
? ? ? ? ? ? ? ? ? ? model.UserId = user.Id;
? ? ? ? ? ? ? ? ? ? model.LoginName = user.Name;
? ? ? ? ? ? ? ? ? ? model.Password = password;
? ? ? ? ? ? ? ? ? ? model.UserName = user.RealName;
? ? ? ? ? ? ? ? ? ? model.IsAdmin = ConvertHelper.FormatDBInt(user.IsAdmin);
? ? ? ? ? ? ? ? ? ? model.SessionId = Guid.NewGuid().ToString();
? ? ? ? ? ? ? ? ? ? model.GroupID = ConvertHelper.FormatDBInt(user.GroupID);
? ? ? ? ? ? ? ? ? ? model.HigherName = user.HigherName;
? ? ? ? ? ? ? ? ? ? if (model.IsAdmin == 1)
? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? model.UserType = AuditRoleType.Admin;
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? else
? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? model.UserType = Sys_UsrDao.Instance.GetUserType(user.Name);
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? string info = JsonHelper.SerializeObject(model);
? ? ? ? ? ? ? ? ? ? var claims = new List<Claim>() {
? ? ? ? ? ? ? ? ? ? ? ?new Claim(ClaimTypes.Name,model.LoginName),
? ? ? ? ? ? ? ? ? ? ? ?new Claim(ClaimTypes.UserData,info),
? ? ? ? ? ? ? ? ? ? };
? ? ? ? ? ? ? ? ? ? var idendity = new ClaimsIdentity(claims, CookieAuthenticationDefaults.AuthenticationScheme);
? ? ? ? ? ? ? ? ? ? var userPrincipal = new ClaimsPrincipal(idendity);
? ? ? ? ? ? ? ? ? ? await _accessor.HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, userPrincipal, new AuthenticationProperties
? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? ExpiresUtc = DateTime.Now.AddDays(1),
? ? ? ? ? ? ? ? ? ? ? ? IsPersistent = false,
? ? ? ? ? ? ? ? ? ? ? ? AllowRefresh = false
? ? ? ? ? ? ? ? ? ? });
? ? ? ? ? ? ? ? ? ? var expres = DateTime.Now.AddDays(1);
? ? ? ? ? ? ? ? ? ? var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(ConfigurationManager.GetSection("Authentication:SecurityKey")));
? ? ? ? ? ? ? ? ? ? var token = new JwtSecurityToken(
? ? ? ? ? ? ? ? ? ? ? ? ? ? issuer: ConfigurationManager.GetSection("Authentication:Issure"), ? ? ? ? ? // 发布者
? ? ? ? ? ? ? ? ? ? ? ? ? ? audience: ConfigurationManager.GetSection("Authentication:Audience"), ? ? ? ? ?// 接收者
? ? ? ? ? ? ? ? ? ? ? ? ? ? notBefore: DateTime.Now, ? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? // token签发时间
? ? ? ? ? ? ? ? ? ? ? ? ? ? expires: expres, ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? // token过期时间
? ? ? ? ? ? ? ? ? ? ? ? ? ? claims: claims, ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? // 该token内存储的自定义字段信息
? ? ? ? ? ? ? ? ? ? ? ? ? ? signingCredentials: new SigningCredentials(key, SecurityAlgorithms.HmacSha256) ? ?// 用于签发token的秘钥算法
? ? ? ? ? ? ? ? ? ? ? ? ? ? );
? ? ? ? ? ? ? ? ? ? // 返回成功信息,写出token ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? model.Token = new JwtSecurityTokenHandler().WriteToken(token);
? ? ? ? ? ? ? ? ? ? string sUserInfo = model.LoginName+"|"+model.Password;
? ? ? ? ? ? ? ? ? ? sUserInfo = EncryptUtil.DesEncrypt(sUserInfo);
? ? ? ? ? ? ? ? ? ? Sys.Tools.CookiesHelper.WriteCookie(UserKey, sUserInfo, (DateTime.Now.AddDays(1)-DateTime.Now).TotalMinutes.ToInt());
? ? ? ? ? ? ? ? ? ? //写入登录日志
? ? ? ? ? ? ? ? ? ? WelcomLogs log = new WelcomLogs();
? ? ? ? ? ? ? ? ? ? log.Id = Sys_UsrDao.Instance.GetMaxId<WelcomLogs>();
? ? ? ? ? ? ? ? ? ? log.Action = "系统登录";
? ? ? ? ? ? ? ? ? ? log.UsrName = userName;
? ? ? ? ? ? ? ? ? ? log.ActionDate = System.DateTime.Now;
? ? ? ? ? ? ? ? ? ? try
? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? string ips = _accessor.HttpContext.Connection.RemoteIpAddress.MapToIPv4().ToString();
? ? ? ? ? ? ? ? ? ? ? ? log.UserIp = ips;
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? catch (Exception ex)
? ? ? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? Sys_UsrDao.Instance.Insert<WelcomLogs>(log);
? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? if (user.IsNewUser == true)
? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? //Response.Redirect("/SysManagement/ChangePassword", true);
? ? ? ? ? ? ? ? ? ? ? ? return RedirectToAction("ChangePassword", "SysManagement");
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? else
? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? if(user.GroupID==15||user.GroupID==7)
? ? ? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? ? ? return RedirectToAction("FlyToEarth", "Cockpit");
? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? else
? ? ? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? ? ? return RedirectToAction("Index", "Home");
? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? ? ? catch (System.Exception ex)
? ? ? ? ? ? {
? ? ? ? ? ? }
? ? ? ? ? ? return RedirectToAction("Index", "Login");
? ? ? ? }
? ? ? ? public IActionResult JYCheckLogin(string userName, string password, string authCode, string verifyCode)
? ? ? ? {

? ? ? ? ? ? if (string.IsNullOrEmpty(authCode))
? ? ? ? ? ? {
? ? ? ? ? ? ? ? //ViewData["c_danger"] = "验证码不能为空";
? ? ? ? ? ? ? ? //return RedirectToAction("Index", "Login", new { c_danger = "验证码不能为空" });
? ? ? ? ? ? ? ? return Json(new { IsSuccess = false, c_danger = "验证码不能为空" });
? ? ? ? ? ? }
? ? ? ? ? ? else
? ? ? ? ? ? {
? ? ? ? ? ? ? ? authCode = EncryptUtil.MD5Password("V_" + authCode).ToLower();
? ? ? ? ? ? ? ? if (authCode != verifyCode)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? //ViewData["c_danger"] = "验证码错误";
? ? ? ? ? ? ? ? ? ? //return RedirectToAction("Index", "Login", new { c_danger = "验证码错误" });
? ? ? ? ? ? ? ? ? ? return Json(new { IsSuccess = false, c_danger = "验证码错误" });
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? ? ? if (string.IsNullOrEmpty(userName))
? ? ? ? ? ? {

? ? ? ? ? ? ? ? //return RedirectToAction("Index", "Login", new { u_danger = "用户名不能为空" });
? ? ? ? ? ? ? ? return Json(new { IsSuccess = false, u_danger = "用户名不能为空" });
? ? ? ? ? ? ? ? //return;
? ? ? ? ? ? }
? ? ? ? ? ? else if (string.IsNullOrEmpty(password))
? ? ? ? ? ? {

? ? ? ? ? ? ? ? //return RedirectToAction("Index", "Login", new { p_danger = "密码不能为空" });
? ? ? ? ? ? ? ? return Json(new { IsSuccess = false, p_danger = "密码不能为空" });
? ? ? ? ? ? ? ? //return;
? ? ? ? ? ? }

? ? ? ? ? ? //1.先Base64位解密
? ? ? ? ? ? password = Base64Provider.Base64Decode(password);
? ? ? ? ? ? string message = RegProvider.IsEngName("密码", password);
? ? ? ? ? ? if (!string.IsNullOrEmpty(message))
? ? ? ? ? ? {
? ? ? ? ? ? ? ? //await Response.WriteAsync("<script>alert('密码只能包含数字、字母或下划线等');window.location.href ='/Login/Index'</script>");
? ? ? ? ? ? ? ? //ViewData["p_danger"] = "密码只能包含数字、字母或下划线等";

? ? ? ? ? ? ? ? //return RedirectToAction("Index", "Login", new { p_danger = "密码只能包含数字、字母或下划线等" });
? ? ? ? ? ? ? ? return Json(new { IsSuccess = false, p_danger = "密码只能包含数字、字母或下划线等" });
? ? ? ? ? ? ? ? //return;
? ? ? ? ? ? }
? ? ? ? ? ? try
? ? ? ? ? ? {
? ? ? ? ? ? ? ? Usr _usermodel = Sys_UsrDao.Instance.GetUser(userName);
? ? ? ? ? ? ? ? //如果次数操作3次,且错误时间间隔小于超过15分钟,返回用户锁定
? ? ? ? ? ? ? ? if (_usermodel != null)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? if (_usermodel.ErrorNum >= 3 && (DateTime.Now.Subtract(Convert.ToDateTime(_usermodel.ErrorLoginTime)).Minutes <= 15))
? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? //await Response.WriteAsync("<script>alert('用户已锁定!');window.location.href ='/Login/Index'</script>");
? ? ? ? ? ? ? ? ? ? ? ? //ViewData["u_danger"] = "用户已锁定";

? ? ? ? ? ? ? ? ? ? ? ? //return RedirectToAction("Index", "Login", new { u_danger = "用户已锁定" });
? ? ? ? ? ? ? ? ? ? ? ? return Json(new { IsSuccess = false, u_danger = "用户已锁定" });
? ? ? ? ? ? ? ? ? ? ? ? //return;
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? else
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? //await Response.WriteAsync("<script>alert('用户不存在!');window.location.href ='/Login/Index'</script>");
? ? ? ? ? ? ? ? ? ? //ViewData["u_danger"] = "用户不存在";


? ? ? ? ? ? ? ? ? ? //return RedirectToAction("Index", "Login", new { u_danger = "用户不存在" });
? ? ? ? ? ? ? ? ? ? return Json(new { IsSuccess = false, u_danger = "用户不存在" });
? ? ? ? ? ? ? ? ? ? //return;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? //2.MD5加密
? ? ? ? ? ? ? ? password = EncryptUtil.MD5Password(password).ToLower();
? ? ? ? ? ? ? ? Usr user = Sys_UsrDao.Instance.GetUser(userName, password);
? ? ? ? ? ? ? ? if (user != null && user.Id > 0 && user.IsRun == true)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? user.ErrorNum = 0;
? ? ? ? ? ? ? ? ? ? Sys_UsrDao.Instance.Update(user);
? ? ? ? ? ? ? ? ? ? if (user.UserType == 2)
? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? if (user.UseDate < Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd")))
? ? ? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? ? ? //await Response.WriteAsync("<script>alert('用户访问权限已到期!');window.location.href ='/Login/Index'</script>");
? ? ? ? ? ? ? ? ? ? ? ? ? ? //ViewData["u_danger"] = "用户访问权限已到期";
? ? ? ? ? ? ? ? ? ? ? ? ? ? return Json(new { IsSuccess = false, u_danger = "用户访问权限已到期" });
? ? ? ? ? ? ? ? ? ? ? ? ? ? //return RedirectToAction("Index", "Login", new { u_danger = "用户访问权限已到期" });

? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? //UserModel model = new UserModel();
? ? ? ? ? ? ? ? ? ? //model.UserId = user.Id;
? ? ? ? ? ? ? ? ? ? //model.LoginName = user.Name;
? ? ? ? ? ? ? ? ? ? //model.Password = password;
? ? ? ? ? ? ? ? ? ? //model.UserName = user.RealName;
? ? ? ? ? ? ? ? ? ? //model.IsAdmin = ConvertHelper.FormatDBInt(user.IsAdmin);
? ? ? ? ? ? ? ? ? ? //model.SessionId = Guid.NewGuid().ToString();
? ? ? ? ? ? ? ? ? ? //model.GroupID = ConvertHelper.FormatDBInt(user.GroupID);
? ? ? ? ? ? ? ? ? ? //model.HigherName = user.HigherName;
? ? ? ? ? ? ? ? ? ? //if (model.IsAdmin == 1)
? ? ? ? ? ? ? ? ? ? //{
? ? ? ? ? ? ? ? ? ? // ? ?model.UserType = AuditRoleType.Admin;
? ? ? ? ? ? ? ? ? ? //}
? ? ? ? ? ? ? ? ? ? //else
? ? ? ? ? ? ? ? ? ? //{
? ? ? ? ? ? ? ? ? ? // ? ?model.UserType = Sys_UsrDao.Instance.GetUserType(user.Name);
? ? ? ? ? ? ? ? ? ? //}

? ? ? ? ? ? ? ? ? ? //string info = JsonHelper.SerializeObject(model);

? ? ? ? ? ? ? ? ? ? //var claims = new List<Claim>() {
? ? ? ? ? ? ? ? ? ? // ? new Claim(ClaimTypes.Name,model.LoginName),
? ? ? ? ? ? ? ? ? ? // ? new Claim(ClaimTypes.UserData,info),
? ? ? ? ? ? ? ? ? ? //};
? ? ? ? ? ? ? ? ? ? //var idendity = new ClaimsIdentity(claims, CookieAuthenticationDefaults.AuthenticationScheme);
? ? ? ? ? ? ? ? ? ? //var userPrincipal = new ClaimsPrincipal(idendity);
? ? ? ? ? ? ? ? ? ? //await _accessor.HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, userPrincipal, new AuthenticationProperties
? ? ? ? ? ? ? ? ? ? //{
? ? ? ? ? ? ? ? ? ? // ? ?ExpiresUtc = DateTime.UtcNow.AddDays(1),
? ? ? ? ? ? ? ? ? ? // ? ?IsPersistent = false,
? ? ? ? ? ? ? ? ? ? // ? ?AllowRefresh = false
? ? ? ? ? ? ? ? ? ? //});
? ? ? ? ? ? ? ? ? ? //var expres = DateTime.Now.AddDays(1);
? ? ? ? ? ? ? ? ? ? //var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(ConfigurationManager.GetSection("Authentication:SecurityKey")));
? ? ? ? ? ? ? ? ? ? //var token = new JwtSecurityToken(
? ? ? ? ? ? ? ? ? ? // ? ? ? ?issuer: ConfigurationManager.GetSection("Authentication:Issure"), ? ? ? ? ? // 发布者
? ? ? ? ? ? ? ? ? ? // ? ? ? ?audience: ConfigurationManager.GetSection("Authentication:Audience"), ? ? ? ? ?// 接收者
? ? ? ? ? ? ? ? ? ? // ? ? ? ?notBefore: DateTime.Now, ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?// token签发时间
? ? ? ? ? ? ? ? ? ? // ? ? ? ?expires: expres, ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? // token过期时间
? ? ? ? ? ? ? ? ? ? // ? ? ? ?claims: claims, ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? // 该token内存储的自定义字段信息
? ? ? ? ? ? ? ? ? ? // ? ? ? ?signingCredentials: new SigningCredentials(key, SecurityAlgorithms.HmacSha256) ? ?// 用于签发token的秘钥算法
? ? ? ? ? ? ? ? ? ? // ? ? ? ?);
? ? ? ? ? ? ? ? ? ?  返回成功信息,写出token ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? //model.Token = new JwtSecurityTokenHandler().WriteToken(token);
? ? ? ? ? ? ? ? ? ? HttpContext.GetTokenAsync(key);
? ? ? ? ? ? ? ? ? ? 写入登录日志
? ? ? ? ? ? ? ? ? ? //WelcomLogs log = new WelcomLogs();
? ? ? ? ? ? ? ? ? ? //log.Id = Sys_UsrDao.Instance.GetMaxId<WelcomLogs>();
? ? ? ? ? ? ? ? ? ? //log.Action = "系统登录";
? ? ? ? ? ? ? ? ? ? //log.UsrName = userName;
? ? ? ? ? ? ? ? ? ? //log.ActionDate = System.DateTime.Now;
? ? ? ? ? ? ? ? ? ? //try
? ? ? ? ? ? ? ? ? ? //{
? ? ? ? ? ? ? ? ? ? // ? ?string ips = _accessor.HttpContext.Connection.RemoteIpAddress.MapToIPv4().ToString();
? ? ? ? ? ? ? ? ? ? // ? ?log.UserIp = ips;
? ? ? ? ? ? ? ? ? ? //}
? ? ? ? ? ? ? ? ? ? //catch (Exception ex)
? ? ? ? ? ? ? ? ? ? //{

? ? ? ? ? ? ? ? ? ? //}
? ? ? ? ? ? ? ? ? ? //Sys_UsrDao.Instance.Insert<WelcomLogs>(log);
? ? ? ? ? ? ? ? ? ? //Response.WriteAsync("<script>window.location.href ='/Home/Index'</script>");
? ? ? ? ? ? ? ? ? ? //RedirectToAction("Index", "Home");
? ? ? ? ? ? ? ? ? ? //判断是否是新用户,是新用户弹出密码修改界面,修改之后改成旧用户
? ? ? ? ? ? ? ? ? ? //if (user.IsNewUser == true)
? ? ? ? ? ? ? ? ? ? //{
? ? ? ? ? ? ? ? ? ? // ? ?//Response.Redirect("/SysManagement/ChangePassword", true);
? ? ? ? ? ? ? ? ? ? // ? ?return RedirectToAction("ChangePassword", "SysManagement");
? ? ? ? ? ? ? ? ? ? //}
? ? ? ? ? ? ? ? ? ? //else
? ? ? ? ? ? ? ? ? ? //{
? ? ? ? ? ? ? ? ? ? // ? ?//return RedirectToAction("JSCYTHIndex1", "Cockpit");
? ? ? ? ? ? ? ? ? ? // ? ?return RedirectToAction("FlyToEarth", "Cockpit");
? ? ? ? ? ? ? ? ? ? //}
? ? ? ? ? ? ? ? ? ? return Json(new { IsSuccess = true });
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? else
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? _usermodel.ErrorNum = _usermodel.ErrorNum == null ? 1 : _usermodel.ErrorNum + 1;
? ? ? ? ? ? ? ? ? ? _usermodel.ErrorLoginTime = DateTime.Now;
? ? ? ? ? ? ? ? ? ? Sys_UsrDao.Instance.Update(_usermodel);
? ? ? ? ? ? ? ? ? ? //CookiesHelper.ClearCookie(UserKey);
? ? ? ? ? ? ? ? ? ? //SessionManager.Instance.RemoveSession(UserKey);
? ? ? ? ? ? ? ? ? ? // return "账号或密码有误";
? ? ? ? ? ? ? ? ? ? //await Response.WriteAsync("<script>alert('账号或密码有误');window.location.href ='/Login/Index'</script>", Encoding.GetEncoding("GB2312"));
? ? ? ? ? ? ? ? ? ? //ViewData["p_danger"] = "账号或密码有误";

? ? ? ? ? ? ? ? ? ? //return RedirectToAction("Index", "Login", new { p_danger = "账号或密码有误" });
? ? ? ? ? ? ? ? ? ? return Json(new { IsSuccess = false, p_danger = "账号或密码有误" });

? ? ? ? ? ? ? ? ? ? //return;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? ? ? catch (System.Exception ex)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? Log4Helper.Error("登录失败" + ex.ToString());
? ? ? ? ? ? ? ? //await Response.WriteAsync("<script>alert('登录失败,请确认账号和密码正确');window.location.href ='/Login/Index'</script>");
? ? ? ? ? ? ? ? //ViewData["p_danger"] = "登录失败,"+ ex.Message;

? ? ? ? ? ? ? ? //return RedirectToAction("Index", "Login", new { u_danger = "登录失败,请联系管理员" });
? ? ? ? ? ? ? ? return Json(new { IsSuccess = false, p_danger = "登录失败,请联系管理员" });
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? public async Task<IActionResult> LoginOut()
? ? ? ? {
? ? ? ? ? ? /// IdentityServer4 退出登录后,默认会跳转到Config.Client配置的PostLogoutRedirectUris地址,
? ? ? ? ? ? ///?
? ? ? ? ? ? await HttpContext.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme);
? ? ? ? ? ?

? ? ? ? ? ? return RedirectToAction("Index", "Login");
? ? ? ? }
? ? ? ? /// <summary>
? ? ? ? /// 获取图片验证码
? ? ? ? /// </summary>
? ? ? ? /// <returns></returns>
? ? ? ? public IActionResult GetAuthCode()
? ? ? ? {
? ? ? ? ? ? List<string> codelist = new VerifyCode().GenerateCheckCode();
? ? ? ? ? ? string checkCode = codelist[0];
? ? ? ? ? ? string verifyCode = codelist[1];
? ? ? ? ? ? verifyCode = EncryptUtil.MD5Password("V_" + verifyCode).ToLower();
? ? ? ? ? ? byte[] image = new VerifyCode().GetVerifyCode(checkCode);
? ? ? ? ? ? string base64 = Convert.ToBase64String(image);
? ? ? ? ? ? return Json(new { base64 = base64, verifyCode = verifyCode });
? ? ? ? ? ? //return File(new VerifyCode().GetVerifyCode(checkCode), @"image/Gif", checkCode);
? ? ? ? }

? ? }
}


?

文章来源:https://blog.csdn.net/qq_26695613/article/details/135743009
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。