Esri Leaflet

ArcGIS Online OAuth

Authenticate ArcGIS Online users with OAuth 2.0 to access user information, private resources and premium services.

<html>
<head>
  <meta charset=utf-8 />
  <title>ArcGIS Online OAuth</title>
  <meta name='viewport' content='initial-scale=1,maximum-scale=1,user-scalable=no' />

  <!-- Load Leaflet from CDN-->
  <link rel="stylesheet" href="http://cdn.leafletjs.com/leaflet-0.7.3/leaflet.css" />
  <script src="http://cdn.leafletjs.com/leaflet-0.7.3/leaflet.js"></script>

  <!-- Load Esri Leaflet from CDN -->
  <script src="http://cdn-geoweb.s3.amazonaws.com/esri-leaflet/1.0.0-rc.2/esri-leaflet.js"></script>

  <style>
    body {margin:0;padding:0;}
    #map {position: absolute;top:0;bottom:0;right:0;left:0;}
  </style>
</head>
<body>

<style>
  #auth {
    position: absolute;
    top: 10px;
    right: 10px;
    z-index: 10;
    background: white;
    padding: 1em;
    box-shadow: 0 1px 5px rgba(0,0,0,0.65);
    border-radius: 4px;
  }

  #auth input {
    display: inline-block;
    border: 1px solid #999;
    font-size: 14px;
    border-radius: 4px;
    height: 28px;
    line-height: 28px;
  }
</style>

<div id="map"></div>
<div id="auth">
  <a href="#" id="sign-in">Sign In</a>
</div>

<script>
  var clientID = 'FxeCTSwkrA9yqVGS';
  var accessToken;
  var callbacks = [];
  var callbackPage = 'http://esri.github.io/esri-leaflet/examples/oauth/callback.html';

  var authPane = document.getElementById('auth');
  var signInButton = document.getElementById('sign-in');

  // this function will open a window and start the oauth process
  function oauth(callback) {
    if(accessToken){
      callback(accessToken);
    } else {
      callbacks.push(callback);
      window.open('https://www.arcgis.com/sharing/oauth2/authorize?client_id='+clientID+'&response_type=token&expiration=20160&redirect_uri=' + window.encodeURIComponent(callbackPage), 'oauth-window', 'height=400,width=600,menubar=no,location=yes,resizable=yes,scrollbars=yes,status=yes');
    }
  }

  // this function will be called when the oauth process is complete
  window.oauthCallback = function(token) {
    L.esri.get('https://arcgis.com/sharing/rest/portals/self', {
      token: token
    }, function(error, response){
      authPane.innerHTML = '<label>Hi '+response.user.username+' your token is <input value="'+token+'"></label>';
    });
  };

  signInButton.addEventListener('click', function(e){
    oauth();
    e.preventDefault();
  });

  // make a new map and basemap
  var map = new L.Map('map').setView([39.36, -96.19], 4);
  L.esri.basemapLayer('Gray').addTo(map);
</script>

</body>
</html>