/// <summary>尝试登录。如果Session未登录则借助Cookie</summary> /// <param name="provider">提供者</param> /// <param name="context">Http上下文,兼容NetCore</param> public static IManageUser TryLogin(this IManageProvider provider, HttpContext context) { var serviceProvider = context?.RequestServices; // 判断当前登录用户 var user = provider.GetCurrent(serviceProvider); if (user == null) { // 尝试从Cookie登录 user = provider.LoadCookie(true, context); if (user != null) { provider.SetCurrent(user, serviceProvider); } } // 设置前端当前用户 if (user != null) { provider.SetPrincipal(serviceProvider); } return(user); }
/// <summary>设置当前用户</summary> /// <param name="provider">提供者</param> /// <param name="context">Http上下文,兼容NetCore</param> public static void SetPrincipal(this IManageProvider provider, IServiceProvider context = null) { //var ctx = context as Microsoft.AspNetCore.Http.HttpContext; var ctx = context as HttpContext ?? HttpContext.Current; if (ctx == null) { return; } var user = provider.GetCurrent(context); if (user == null) { return; } if (!(user is IIdentity id) || ctx.User?.Identity == id) { return; } // 角色列表 var roles = new List <String>(); if (user is IUser user2) { roles.AddRange(user2.Roles.Select(e => e + "")); } var up = new GenericPrincipal(id, roles.ToArray()); ctx.User = up; Thread.CurrentPrincipal = up; }
/// <summary>设置当前用户</summary> /// <param name="provider">提供者</param> /// <param name="context">Http上下文,兼容NetCore</param> public static void SetPrincipal(this IManageProvider provider, IServiceProvider context = null) { var ctx = ModelExtension.GetService <IHttpContextAccessor>(context)?.HttpContext; if (ctx == null) { return; } var user = provider.GetCurrent(context); if (user == null) { return; } if (user is not IIdentity id || ctx.User?.Identity == id) { return; } // 角色列表 var roles = new List <String>(); if (user is IUser user2) { roles.AddRange(user2.Roles.Select(e => e + "")); } var up = new GenericPrincipal(id, roles.ToArray()); ctx.User = up; Thread.CurrentPrincipal = up; }
/// <summary>尝试登录。如果Session未登录则借助Cookie</summary> /// <param name="provider">提供者</param> /// <param name="context">Http上下文,兼容NetCore</param> public static IManageUser TryLogin(this IManageProvider provider, IServiceProvider context = null) { // 判断当前登录用户 var user = provider.GetCurrent(context); if (user == null) { // 尝试从Cookie登录 user = provider.LoadCookie(true, context); if (user != null) { provider.SetCurrent(user, context); } } // 设置前端当前用户 if (user != null) { provider.SetPrincipal(context); } return(user); }