-
Notifications
You must be signed in to change notification settings - Fork 463
Refresh token using JavaScript SDK example
somriar edited this page Jun 20, 2017
·
5 revisions
Embedding and interacting with reports/dashboards/tiles requires the use of an Embed Token. Embed Token has expiration time, this means that after embedding a report(we will use report for the examples) you are limited in the time you can interact with it(some interactions do not require EmbedToken). In order to solve this limitation you can set a listener on the time until token expiration, generate a new Embed Token and set the new token using our JavaScript SDK
Here is one example for embedding a report and setting a listener on token expiration by using our JavaScript SDK:
- generateEmbedToken() is a function you need to implement, it calls the application Back End and returns the Embed Token
function embedReportAndSetTokenListener(setAccessToken = false,
reportId,
groupId,
datasetId,
accessLevel,
baseUri,
embedUrl) {
// Generate embed token
generateEmbedToken(reportId, groupId)
.then(function( Token ) {
var embedToken = Token.token;
// set config for embedding report
var config = createConfig(embedToken,embedUrl,reportId);
// Get a reference to the embedded report HTML element
var embedContainer = $('#embedContainer')[0];
// Embed the report and display it within the div container.
var report = powerbi.embed(embedContainer, config);
// Report.off removes a given event handler if it exists.
report.off("loaded");
// Report.on will add an event handler which prints to Log window.
report.on("loaded", function() {
// Set token expiration listener
setTokenExpirationListener(Token.expiration,
2 /*minutes before expiration*/,
reportId,
groupId);
});
});
}
function setTokenExpirationListener(tokenExpiration,
minutesToRefresh = 2,
reportId,
groupId){
// get current time
var currentTime = Date.now();
var expiration = Date.parse(tokenExpiration);
var safetyInterval = minutesToRefresh* 60 * 1000;
// time until token refresh in milliseconds
var timeout = expiration - currentTime - safetyInterval;
// if token already expired, generate new token and set the access token
if (timeout<=0)
{
console.log("Updating Report Embed Token");
updateToken(reportId, groupId);
}
// set timeout so minutesToRefresh minutes before token expires, token will be updated
else
{
console.log("Report Embed Token will be updated in " + timeout + " milliseconds.");
setTimeout(function() {
updateToken(reportId, groupId);
}, timeout);
}
}
function updateToken(reportId, groupId) {
// Generate new EmbedToken
generateEmbedToken(reportId, groupId)
.then(function( Token ) {
// Get a reference to the embedded report HTML element
var embedContainer = $('#embedContainer')[0];
// Get a reference to the embedded report.
var report = powerbi.get(embedContainer);
// Set AccessToken
report.setAccessToken(Token.token)
.then(function() {
// Set token expiration listener
// result.expiration is in ISO format
setTokenExpirationListener(Token.expiration,2 /*minutes before expiration*/);
});
});
}