PowerBI-JavaScript setAccessToken不起作用

时间:2018-04-20 09:49:38

标签: javascript powerbi-embedded

我正在使用 PowerBI-JavaScript 库在我的网站上嵌入信息中心:

var config = {
    type: 'dashboard',
    tokenType: models.TokenType.Embed,
    accessToken: accessToken,
    embedUrl: embedUrl,
    id: embedDashboardId
};

// Get a reference to the embedded dashboard HTML element
var dashboardContainer = $('#dashboardContainer')[0];

// Embed the dashboard and display it within the div container.
var dashboard = powerbi.embed(dashboardContainer, config);

我想使用setAccessToken来更新我的AccessToken保持仪表板未过期,所以我在下面创建了函数:

function setToken() {

    dashboard.setAccessToken("newtoken")
        .then(function (r) {
            console.log(r);
            console.log("Update success!!")
        })
        .catch(function (e) {
            console.error('Error setting access token', e);
        });

}

我可以在控制台上看到“更新成功!!”。但是当我使用getAccessToken()时,AccessToken与之前相同。它没有更新我的AccessToken !!

请给我一个建议或解决方案来解决这个问题!我将不胜感激。

2 个答案:

答案 0 :(得分:0)

在调用SetAccessToken后,您是否真的看到使用旧访问令牌的请求? 调用SetAccessToken后GetAccessToken返回错误的结果是javascript SDK中的错误

答案 1 :(得分:0)

我解决了!你如何看到lib中的代码,当你设置新的访问令牌时,它将它发送给服务,显然不存储你的令牌:

Embed.prototype.setAccessToken = function (accessToken) {
        var embedType = this.config.type;
        return this.service.hpm.post('/' + embedType + '/token', accessToken, { uid: this.config.uniqueId }, this.iframe.contentWindow)
            .then(function (response) {
            return response.body;
        })
            .catch(function (response) {
            throw response.body;
        });
    };

当你调用getAccessToken时,它将返回你在配置对象中首先提供的令牌(如果它是惰性求值的,我认为是这样):

Embed.prototype.getAccessToken = function (globalAccessToken) {
        var accessToken = this.config.accessToken || this.element.getAttribute(Embed.accessTokenAttribute) || globalAccessToken;
        if (!accessToken) {
            throw new Error("No access token was found for element. You must specify an access token directly on the element using attribute '" + Embed.accessTokenAttribute + "' or specify a global token at: powerbi.accessToken.");
        }
        return accessToken;
    };