I'm struggling to generate a security token from my on-premise token server. The SDK's documentation is not obvious.
My code is:
var si = new esri.ServerInfo();
si.tokenServiceUrl = "http://www.MyTokenDispenser.com/ArcGIS/tokens/";
var imb = new esri.IdentityManagerBase();
imb.on("credential-create", createdCredential);
imb.generateToken({
serverInfo:si,
userInfo:{userName:"MyUserName", password:"MyPassword"}
});
I want to catch the token in the createdCredential method.
This code throws an error in the JSAPI API:
TypeError: r is undefined
Line 663
We do not want to use the out-of-the-box login that comes with esri.IdentityManager, instead we want to generate our own tokens and credentials. I can use query GET to get a token and I can use esri.request to get a token so long as I enable a proxy, but the code is a bit messy and defeats the purpose of the ArcGIS JSAPI.
TIA for any guidance you can offer.
Use something like this:
require([ "esri/IdentityManager", "esri/ServerInfo", "esri/Credential", "esri/request" ], function( idManager, ServerInfo, Credential, esriRequest ) { var serverInfo = new ServerInfo(); serverInfo.server = "http://geocode.arcgis.com"; serverInfo.tokenServiceUrl = "https://www.arcgis.com/sharing/generateToken"; idManager.registerServers([serverInfo]); var userId = "MyUserID", password = "MyPassword"; idManager.generateToken(serverInfo, { username: userId, password: password }).then(function(response) { idManager.registerToken({ server: serverInfo.server, userId: userId, token: response.token, expires: response.expires, ssl: response.ssl }); esriRequest({ url: "http://geocode.arcgis.com/arcgis/rest/services/World/GeocodeServer/geocodeAddresses", content: { f: "json", addresses: JSON.stringify({ records: [{ attributes: { Address: "380 New York St", City: "Redlands" } }] }) } }).then(function(response) { console.log(response); }); }); });