I am doing an node project for Building apps to connect to Office 365: Authenticating. but getting this error

Viewed 80

I am doing a node project for Building apps to connect to Office 365: Authenticating using Microsoft Graph API and to create, update and delete information in Microsoft calendar. but getting this error. cannot get the access token, please help. I am new to this tech. This is the error

TypeError: Cannot read property 'authorizeURL' of undefined
    at Object.getAuthUrl (C:\Users\Shamir\projects\node-calendar-sync-cleanslate\authHelper.js:30:39)
    at C:\Users\Shamir\projects\node-calendar-sync-cleanslate\app.js:29:39
    at Layer.handle [as handle_request] (C:\Users\Shamir\projects\node-calendar-sync-cleanslate\node_modules\express\lib\router\layer.js:95:5)
    at next (C:\Users\Shamir\projects\node-calendar-sync-cleanslate\node_modules\express\lib\router\route.js:137:13)
    at Route.dispatch (C:\Users\Shamir\projects\node-calendar-sync-cleanslate\node_modules\express\lib\router\route.js:112:3)
    at Layer.handle [as handle_request] (C:\Users\Shamir\projects\node-calendar-sync-cleanslate\node_modules\express\lib\router\layer.js:95:5)
    at C:\Users\Shamir\projects\node-calendar-sync-cleanslate\node_modules\express\lib\router\index.js:281:22
    at Function.process_params (C:\Users\Shamir\projects\node-calendar-sync-cleanslate\node_modules\express\lib\router\index.js:335:12)
    at next (C:\Users\Shamir\projects\node-calendar-sync-cleanslate\node_modules\express\lib\router\index.js:275:10)
    at session (C:\Users\Shamir\projects\node-calendar-sync-cleanslate\node_modules\express-session\index.js:475:7)

this is my authHelper.js file

var scopes = [
    'openid',
    'offline_access',
    'https://outlook.office.com/calendars.read'
  ];
  
  var {AuthorizationCode} = require('simple-oauth2');
  var oauth2 = new AuthorizationCode ({
    client: {
    id: clientId,
    secret: clientSecret
    },
    auth:{
     tokenHost: site,
     authorizePath: authorizationPath,
     tokenPath: tokenPath
    }
  });
   
  module.exports = {
    getAuthUrl: function() {
      var returnVal = oauth2.authCode.authorizeURL({
        redirect_uri: redirectUri,
        scope: scopes.join(' ')
      });
      console.log('');
      console.log('Generated auth url: ' + returnVal);
      return returnVal;
    },
  
    getTokenFromCode: function(auth_code, callback, request, response) {
      oauth2.authCode.getToken({
        code: auth_code,
        redirect_uri: redirectUri,
        scope: scopes.join(' ')
        }, function (error, result) {
          if (error) {
            console.log('Access token error: ', error.message);
            callback(request ,response, error, null);
          }
          else {
            var token = oauth2.accessToken.create(result);
            console.log('');
            console.log('Token created: ', token.token);
            callback(request, response, null, token);
          }
        });
    },
  
    getEmailFromIdToken: function(id_token) {
      // JWT is in three parts, separated by a '.'
      var token_parts = id_token.split('.');
  
      // Token content is in the second part, in urlsafe base64
      var encoded_token = new Buffer(token_parts[1].replace('-', '+').replace('_', '/'), 'base64');
  
      var decoded_token = encoded_token.toString();
  
      var jwt = JSON.parse(decoded_token);
  
      // Email is in the preferred_username field
      return jwt.preferred_username
    },
  
    getTokenFromRefreshToken: function(refresh_token, callback, request, response) {
      var token = oauth2.accessToken.create({ refresh_token: refresh_token, expires_in: 0});
      token.refresh(function(error, result) {
        if (error) {
          console.log('Refresh token error: ', error.message);
          callback(request, response, error, null);
        }
        else {
          console.log('New token: ', result.token);
          callback(request, response, null, result);
        }
      });
    }
  };

this is my app.js file

var express = require('express');
var app = express();

var bodyParser = require('body-parser');
var cookieParser = require('cookie-parser');
var session = require('express-session');
var moment = require('moment');
var querystring = require('querystring');

// Very basic HTML templates
var pages = require('./pages');
var authHelper = require('./authHelper');

// Configure express
// Set up rendering of static files
app.use(express.static('static'));
// Need JSON body parser for most API responses
app.use(bodyParser.json());
// Set up cookies and sessions to save tokens
app.use(cookieParser());
app.use(session(
  { secret: '0dc529ba-5051-4cd6-8b67-c9a901bb8bdf',
    resave: false,
    saveUninitialized: false 
  }));
  
// Home page
app.get('/', function(req, res) {
  res.send(pages.loginPage(authHelper.getAuthUrl()));
});

app.get('/authoriz', function(req, res) {
  var authCode = req.query.code;
  if (authCode) {
    console.log('');
    console.log('Retrieved auth code in /authoriz: ' + authCode);
    authHelper.getTokenFromCode(authCode, tokenReceived, req, res);
  }
  else {
    // redirect to home
    console.log('/authoriz called without a code parameter, redirecting to login');
    res.redirect('/');
  }
});

function tokenReceived(req, res, error, token) {
  if (error) {
    console.log('ERROR getting token:'  + error);
    res.send('ERROR getting token: ' + error);
  }
  else {
    // save tokens in session
    req.session.access_token = token.token.access_token;
    req.session.refresh_token = token.token.refresh_token;
    req.session.email = authHelper.getEmailFromIdToken(token.token.id_token);
    res.redirect('/logincomplete');
  }
}

app.get('/logincomplete', function(req, res) {
  var access_token = req.session.access_token;
  var refresh_token = req.session.access_token;
  var email = req.session.email;
  
  if (access_token === undefined || refresh_token === undefined) {
    console.log('/logincomplete called while not logged in');
    res.redirect('/');
    return;
  }
  
  res.send('Access token: ' + access_token);
});

// Start the server
var server = app.listen(3000, function() {
  var host = server.address().address;
  var port = server.address().port;
  
  console.log('Example app listening at http://%s:%s', host, port);
});
0 Answers
Related