许可优化
许可优化
产品
产品
解决方案
解决方案
服务支持
服务支持
关于
关于
软件库
当前位置:服务支持 >  软件文章 >  ArcGIS JS API加载Portal中的服务时一直弹窗提示输入用户名/密码的解决方法

ArcGIS JS API加载Portal中的服务时一直弹窗提示输入用户名/密码的解决方法

阅读数 15
点赞 0
article_banner

问题描述

       当我们用ArcGIS JS API(无论3.X还是4.X版本)去加载Portal for ArcGIS中的服务或者GP工具等资源时,如果该资源的权限不是公共的,在我们的前端界面就一直会有一个弹窗,提示我们输入用户名/密码,如下图所示:

解决方法

       其实这问题就是由权限问题引起, 解决 此问题的核心就是解决你要加载引用的这个服务或者GP工具等资源的权限即可,有两种有效的方法:

1、修改此数据资源的权限(最简单、但不推荐)

       既然是由资源自身的权限问题引起的,那我们只需要修改它的权限就可以啊,没错,确实是这样。

       我们在Portal里找到你要引用的资源,然后点击它后面的权限图标,将它的权限修改为“公共”即可,如下图所示:

        经过上图的操作,我们的 数据 资源权限已经变成了公共了,这时候你再去刷新前端页面,烦人的小弹窗已经不见了。但是,更烦人的问题来了,客户会问你,你这样子将我们的数据相当于暴露了啊,这个方法我可接受不了。OK,那我们找找另外的方法。

2、 注册 token(代码层面解决,极力推荐)

       既然我们直接将要引用的数据资源权限修改为“公共”的方法有人接受不了,那我们就不动它的权限,我们发挥码奴自身的优良传统,自己在代码层面解决。

       然后查阅JS API发现,官网已经提供了这样的接口,我们只需要调用Portal的REST接口生成token,然后调用我们JS API官网提供的注册token的接口将我们生成的token注册了,那接下来你想加载引入多少个私有权限的资源都没有问题,具体操作如下:

2.1 调用Portal的REST接口来生成token,代码如下:

            const _self = this;            const option = {                url: gConfig.arcgis_jsapi_hosturl + 'init.js',                css: gConfig.arcgis_jsapi_hosturl + 'esri/themes/light/main.css',            };             loadModules([                'esri/config',            ], option)                .then(([esriConfig]) => {                    esriConfig.portalUrl = gConfig.portal_arcgis_hosturl + 'arcgis';   //配置portal                     // 注册token                    let portalToken = null;                    const params = {                        'username': gConfig.portal_username,                        'password': gConfig.portal_pwd,                        'referer': window.location.hostname,                        'f': 'json',                    };                     axios({                        method: 'post',                        url: gConfig.portal_arcgis_hosturl + 'arcgis/sharing/rest/generateToken',                        data: qs.stringify(params),                    }).then( function(response) {                        portalToken = response.data.token;   //成功返回的portal                     }).catch(function(error) {                        console.log(error);                    });                 }).catch((err) => {                    _self.$message('底图创建失败,' + err);                });

2.2 调用“esri/identity/IdentityManager”接口去注册token,便于后续代码调用私有的服务资源等,代码如下:

            const _self = this;            const option = {                url: gConfig.arcgis_jsapi_hosturl + 'init.js',                css: gConfig.arcgis_jsapi_hosturl + 'esri/themes/light/main.css',            };             loadModules([                'esri/config',                'esri/identity/IdentityManager',            ], option)                .then(([esriConfig, IdentityManager]) => {                    esriConfig.portalUrl = gConfig.portal_arcgis_hosturl + 'arcgis';                     // 注册token                    let portalToken = null;                    const params = {                        'username': gConfig.portal_username,                        'password': gConfig.portal_pwd,                        'referer': window.location.hostname,                        'f': 'json',                    };                     axios({                        method: 'post',                        url: gConfig.portal_arcgis_hosturl + 'arcgis/sharing/rest/generateToken',                        data: qs.stringify(params),                    }).then( function(response) {                        portalToken = response.data.token;                         IdentityManager.registerToken({    //注册生成的token                            server: gConfig.portal_arcgis_hosturl + 'arcgis/sharing/rest',                            token: portalToken,                        });                    }).catch(function(error) {                        console.log(error);                    });                 }).catch((err) => {                    _self.$message('底图创建失败,' + err);                });

2.3 token生成了,然后也注册了,接下来我们就可以加载我们自己想要加载的一些资源啦,具体 实例 代码如下所示:

        // 创建底图        _createMap: function(nodeid) {            const _self = this;            const option = {                url: gConfig.arcgis_jsapi_hosturl + 'init.js',                css: gConfig.arcgis_jsapi_hosturl + 'esri/themes/light/main.css',            };             loadModules(['esri/WebMap',                'esri/views/MapView',                'esri/config',                'esri/identity/IdentityManager',                'esri/widgets/ScaleBar'], option)                .then(([WebMap, MapView, esriConfig, IdentityManager, ScaleBar]) => {                    esriConfig.portalUrl = gConfig.portal_arcgis_hosturl + 'arcgis';                     // 注册token                    let portalToken = null;                    const params = {                        'username': gConfig.portal_username,                        'password': gConfig.portal_pwd,                        'referer': window.location.hostname,                        'f': 'json',                    };                     axios({                        method: 'post',                        url: gConfig.portal_arcgis_hosturl + 'arcgis/sharing/rest/generateToken',                        data: qs.stringify(params),                    }).then( function(response) {                        portalToken = response.data.token;                         IdentityManager.registerToken({                            server: gConfig.portal_arcgis_hosturl + 'arcgis/sharing/rest',                            token: portalToken,                        });                    }).catch(function(error) {                        console.log(error);                    });                 	//创建地图                    const webmap = new WebMap({                        portalItem: {                            // autocasts as new PortalItem()                            id: gConfig.largeScreenWebMapID,                        },                    });                     const view = new MapView({                        container: nodeid,                        map: webmap,                        zoom: _self.mapviewLevel,                        center: [102.714408, 25.043706],                    });                 }).catch((err) => {                    _self.$message('底图创建失败,' + err);                });        },


免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删


相关文章
技术文档
QR Code
微信扫一扫,欢迎咨询~
customer

online

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 board-phone 155-2731-8020
close1
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

姓名不为空

姓名不为空
手机不正确

手机不正确

手机不正确
公司不为空

公司不为空

公司不为空