当前位置: 首页 > news >正文

【.net core】【wetercloud】处理前端项目免登陆,且从前端项目跳转至系统内时的问题

1.前端项目访问后台内容时免登陆(一般用于后台接口需要校验登陆时)

处理思路:将后台用户的登陆校验令牌信息在用户登录后添加至前端项目访问地址的参数列表中,如:

https://yourdomain/Home/Index#/https://yourdomain/virtualdirectory/?watercloud_Token=86df42b8-1baa-4e6f-8222-7fa8859e34dd&watercloud_Mark=cf06dad9-3a1c-4c6d-8ccb-4f65aecd20c6&pc_WC-Token=08dddb95-dc77-4fc0-8d83-5bc78a7c8086

修改后台菜单页面链接:此处以设置首页地址为例,如果需要设置为菜单地址则需要增加逻辑判断

在WaterCloud.Web\Controllers\ClientsDataController.cs文件中,修改GetMenuListNew方法

/// <summary>
/// 菜单按钮信息
/// </summary>
/// <returns></returns>
private async Task<string> GetMenuListNew()
{var currentuser = _userService.currentuser;string pc_token =  await CacheHelper.GetAsync<string>("pc_" + GlobalContext.SystemConfig.TokenName + "_" + currentuser.UserId + "_" + currentuser.LoginTime);var roleId = currentuser.RoleId;StringBuilder sbJson = new StringBuilder();InitEntity init = new InitEntity();init.homeInfo = new HomeInfoEntity();//首页信息实体var url = HttpUtility.UrlEncode( $"watercloud_Token={currentuser.LoginToken}&watercloud_Mark={currentuser.loginMark}&pc_WC-Token={pc_token}");//设置首页地址init.homeInfo.href = $"{GlobalContext.SystemConfig.HomePage}?{url}";//	https://qzgt.etianshui.com/qzgtxzgl	init.logoInfo = new LogoInfoEntity();var systemset = await _setService.GetForm(currentuser.CompanyId);//修改主页及logo参数init.logoInfo.title = systemset.F_LogoCode;init.logoInfo.image = ".." + systemset.F_Logo;init.menuInfo = new List<MenuInfoEntity>();init.menuInfo = ToMenuJsonNew(await _roleAuthorizeService.GetMenuList(roleId), "0");sbJson.Append(init.ToJson());return sbJson.ToString();
}

此时在打开该前端项目地址时,将可在前端项目页面中,通过页面参数获取后台登陆用户的令牌信息:、watercloud_Token、pc_WC-Token

在调用接口时,可以通过传输令牌信息,后台可通过令牌信息(应该是watercloud_Token,如果不是就换成watercloud_Token)获取缓存中的当前登录用户信息,如:

var authHeader = Request.Headers["WC-Token"].ToString();//从请求中的headers中获取令牌信息
var model = await CacheHelper.GetAsync<OperatorModel>("watercloud_operator_"+authHeader+"");//在缓存中获取当前登录用户信息

获取当前用户之后则可进行之后的业务流程

2.前端项目跳转至系统内

在获取登录令牌信息后,可将令牌信息内容设置在cookie中并发起连接的跳转或通过弹框(iframe)打开地址或新页面打开链接(注意:此处通过前端项目打开后台系统菜单地址时,需要前端页面和后台系统在同一个浏览器中打开,且后台必须先登录,后进行跳转,否则将无法识别跳转页面的脚本内容导致页面报错

前端处理内容:在获取令牌信息后,需将信息格式化为cookie字符串并设置cookie,然后发起连接跳转

拼接的方式是:参数名+等号+参数+分号+空格(此处是否一定需要加空格没有深究,仅是按照后台页面上显示的内容进行复刻

//watercloud_Token,watercloud_Mark,pc_WC-Token为页面获取到的令牌信息。wc_returnurl为后台系统菜单地址
document.cookie = "watercloud_Token=86df42b8-1baa-4e6f-8222-7fa8859e34dd; watercloud_Mark=cf06dad9-3a1c-4c6d-8ccb-4f65aecd20c6; pc_WC-Token=08dddb95-dc77-4fc0-8d83-5bc78a7c8086; wc_returnurl=/NeiWaiQin/Cardreplacement/Index;"
//以新页面打开方式打开链接
window.open("https://yourDomain/NeiWaiQin/Cardreplacement/Index")

执行后将跳转至后台系统指定菜单下,如:

3.弹框方式打开时页面按钮不显示问题

引发该问题的原因在于系统框架脚本中判断按钮是否显示的条件为:

var moduleId = top.$(".layui-tab-title>.layui-this").attr("lay-id");

此时获取到的moduleId值为:

https://yourdomain/Home/Index#/https://yourdomain/virtualdirectory/?watercloud_Token=86df42b8-1baa-4e6f-8222-7fa8859e34dd&watercloud_Mark=cf06dad9-3a1c-4c6d-8ccb-4f65aecd20c6&pc_WC-Token=08dddb95-dc77-4fc0-8d83-5bc78a7c8086

系统菜单中无改内容所以按钮不显示,所以修改判断条件即可

解决方案:修改WaterCloud.Web\wwwroot\js\lay-module\waterCloud\common.js文件中的authorizeButtonNew方法:(增加虚拟路径判断条件,如果获取值中存在虚拟路径内容,则判断为前端项目跳转至后台的情况,将moduleId值设置为location.pathname(当前打开链接地址,从前端项目跳转至后台系统菜单时此处的值为:NeiWaiQin/Workovertime/Index),系统判断如果当前人员有该按钮权限则显示按钮)

//按钮权限(控制js模板,格式必须严格,新)
authorizeButtonNew: function (innerHTML) {//行操作权限控制var moduleId = top.$(".layui-tab-title>.layui-this").attr("lay-id");if (!moduleId || moduleId.indexOf("/qzgtxzgl/") != -1) {//增加虚拟路径判断,如果取不到值或者是大数据链接进入,获取当前pathnamemoduleId = location.pathname;}var returnhtml = '';//没有就全清if (!top.clients || !top.clients.authorizeButton) {return returnhtml;}var dataJson = top.clients.authorizeButton[moduleId.split("?")[0]];if (innerHTML.indexOf('</button>') > -1) {var buttonHumanized = sessionStorage.getItem('watercloudButtonHumanized');var tempList = innerHTML.split('</button>');for (var i = 0; i < tempList.length; i++) {if (tempList[i].indexOf('<button ') > -1) {var itemList = tempList[i].split('<button ');returnhtml = returnhtml + itemList[0];if (itemList[1].indexOf(' authorize') == -1) {returnhtml = returnhtml + '<button ' + itemList[1] + '</button>';}else if (dataJson != undefined) {$.each(dataJson, function (i) {if (itemList[1].indexOf('id="' + dataJson[i].F_EnCode + '"') > -1) {returnhtml = returnhtml + '<button ' + itemList[1] + '</button>';return false;}});}if (!!buttonHumanized) {returnhtml = returnhtml.replace('layui-hide','');}if (itemList.length>2) {returnhtml = returnhtml + itemList[2];}}else {returnhtml = returnhtml + tempList[i];}}}else if (innerHTML.indexOf('</a>') > -1){var tempList = innerHTML.split('</a>');for (var i = 0; i < tempList.length; i++) {if (tempList[i].indexOf('<a ') > -1) {var itemList = tempList[i].split('<a ');returnhtml = returnhtml + itemList[0];if (itemList[1].indexOf(' authorize') == -1) {returnhtml = returnhtml + '<a ' + itemList[1] + '</a>';}else if (dataJson != undefined) {$.each(dataJson, function (i) {if (itemList[1].indexOf('id="' + dataJson[i].F_EnCode + '"') > -1) {returnhtml = returnhtml + '<a ' + itemList[1] + '</a>';return false;}});}if (itemList.length > 2) {returnhtml = returnhtml + itemList[2];}}else {returnhtml = returnhtml + tempList[i];}}}//去除隐藏//returnhtml = returnhtml.replace(/ layui-hide/g, '');return returnhtml;
},

http://www.dtcms.com/a/333060.html

相关文章:

  • 【学习嵌入式day-25-线程】
  • 2020 GPT3 原文 Language Models are Few-Shot Learners 精选注解
  • git推送远程仓库报错:Bad configuration option: \357\273\277include
  • Git报错 “fatal: unable to access CRYPT_E_REVOCATION_OFFLINE (0x80092013)“问题的解决方法
  • 【CV 目标检测】②R-CNN模型
  • C# 中的计时器:Stopwatch 用法解析
  • diffusers学习--stable diffusion的管线解析
  • 第五天~提取Arxml的模板信息
  • react项目性能优化的hook
  • UGUI源码剖析(9):布局的实现——LayoutGroup的算法与实践
  • java程序打包成exe,再打成安装包,没有jdk环境下可运行
  • 【完整源码+数据集+部署教程】孔洞检测系统源码和数据集:改进yolo11-RetBlock
  • 金刚石基植入体新突破!Adv. Funct. Mater. 报道首例增材制造固态摩擦电能量收集器
  • 【FastGTP✨】[01] 使用 FastGPT 搭建简易 AI 应用
  • 部署Qwen-Image,通过API返回可访问的图像URL
  • 以下是对智能电梯控制系统功能及系统云端平台设计要点的详细分析,结合用户提供的梯控系统网络架构设计和系统软硬件组成,分点论述并补充关键要点:
  • 一文打通 AI 知识脉络:大语言模型等关键内容详解
  • 铨林接纸机学习记录1
  • AI智能文档生成系统需求规格说明书
  • Linux 进程、线程与 exec/系统调用详解
  • MySQL中的字符串函数
  • PowerShell 格式化系统完全掌握(下):自定义列/格式字符串/对齐与宽度 + 实战模板
  • 抗日胜利80周年 | HTML页面
  • 智和信通全栈式运维平台落地深圳某学院,赋能运维管理提质提效
  • TCP传输层协议(4)
  • 微信实名认证组件
  • 二十四、Mybatis-基础操作-删除(预编译SQL)
  • SAP ALV导出excel 报 XML 错误的 /xl/sharedStrings.xml
  • Android协程的用法大全
  • 汽车电子:现代汽车的智能核心