/// <summary> ///保存用户状态 /// </summary> /// <param name="uInfo"></param> public void SetSession(BaseUserResult uInfo) { bool setFlag = false; if (_httpContext.Session == null) { throw new ArgumentNullException(); } if (string.IsNullOrEmpty(_httpContext.Session.GetString(UserSessionKey))) { setFlag = true; } else { var user = JsonConvert.DeserializeObject <BaseUserResult>(_httpContext.Session.GetString(UserSessionKey)); if (user != null && user.Id != uInfo.Id) { setFlag = true; } ; } if (setFlag) { try { _httpContext.Session.SetString(UserSessionKey, JsonConvert.SerializeObject(uInfo)); } catch { // ignored } } }
public IActionResult Index(Login login) { if (ModelState.IsValid) { login.Password = EncryptHelper.MD5DesEncrypt(login.Password); var userInfo = SqlSugarDbContext.Instance.ExecutedSql().Queryable <Admin>().Where(w => w.Account == login.Email).First(); if (userInfo != null) { if (userInfo.Password != login.Password) { ModelState.AddModelError(string.Empty, "登录失败,密码错误"); return(View(login)); } var user = new BaseUserResult { Id = userInfo.Id, Name = userInfo.Name, Token = userInfo.Token, Account = userInfo.Account, RoleId = userInfo.RoleId }; _Authentication.SetAuth(user, login.RememberMe); return(Redirect(TempData["returnUrl"] == null ? "/Home/Index" : TempData["returnUrl"].ToString())); } else { ModelState.AddModelError(string.Empty, "登录失败,用户名或密码错误"); return(View(login)); } } return(View(login)); }
/// <summary> ///保存用户状态 /// </summary> /// <param name="uInfo"></param> public void SetSession(BaseUserResult uInfo) { bool setFlag = false; if (_httpContext.Session == null) { throw new ArgumentNullException(); } if (string.IsNullOrEmpty(_httpContext.Session.GetString(UserSessionKey))) { setFlag = true; } else { var user = JsonConvert.DeserializeObject <BaseUserResult>(_httpContext.Session.GetString(UserSessionKey)); if (user != null && user.Id != uInfo.Id) { setFlag = true; } ; } if (setFlag) { try { IList <BaseSysMenu> menus; var sql = string.Empty; //管理员 if (uInfo.RoleId == 1) { sql = $@"select Id,`Name`,Controller,Action from SysMenu where Valid=1"; } else { //查询用户菜单 sql = $@"select m.Id,`Name`,Controller,Action from SysMenu as m left join RoleMenu r on m.Id=r.MenuId where r.RoleId={uInfo.RoleId} and r.UserId={uInfo.Id} and m.Valid=1 and r.Valid=1"; } //菜单信息表 menus = SqlSugarDbContext.Instance.ExecutedSql().SqlQueryable <BaseSysMenu>(sql).ToList(); _httpContext.Session.SetString(PermissionKey, JsonConvert.SerializeObject(menus)); _httpContext.Session.SetString(UserSessionKey, JsonConvert.SerializeObject(uInfo)); } catch { // ignored } } }
/// <summary> /// 写入验证信息 /// </summary> /// <param name="uInfo"></param> /// <param name="isPersistent">是否保存</param> public void SetAuth(BaseUserResult uInfo, bool isPersistent) { //当前登录的用户信息 var claims = new List <Claim> { new Claim("UserId", uInfo.Id.ToString()) }; var claimsIdentity = new ClaimsIdentity(claims, CookieAuthenticationDefaults.AuthenticationScheme); //可以使用HttpContext.SignInAsync方法的重载来定义持久化cookie存储用户认证信息,例如下面的代码就定义了用户登录后60分钟内cookie都会保留在客户端计算机硬盘上, //即便用户关闭了浏览器,60分钟内再次访问站点仍然是处于登录状态,除非调用Logout方法注销登录。 //_httpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, new ClaimsPrincipal(claimsIdentity)); _httpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, new ClaimsPrincipal(claimsIdentity), new AuthenticationProperties() { IsPersistent = isPersistent, ExpiresUtc = isPersistent ? DateTimeOffset.Now.AddDays(7) : DateTime.Now.AddHours(6) }); SetSession(uInfo); }