2017-01-02 3 views
0

Я пытаюсь создать Azure EasyAPI, чтобы получить некоторую информацию пользователя от поставщика удостоверений (Microsoft) в моем приложении. Тем не менее, я получаю сообщение об ошибке из всех примеров, которые я нашел в Интернете, и ни один из ответов, которые я нашел в stackoverflow, не помог.Получение информации пользователя от поставщика идентификации и Azure EasyAPI

Ошибка:

Azure Log:  
    : Application has thrown an uncaught exception and is terminated: 
SyntaxError: Unexpected end of input 
    at Object.parse (native) 
    at IncomingMessage.<anonymous> (D:\home\site\wwwroot\node_modules\azure-mobile-apps\src\auth\getIdentity.js:35:55) 
    at emitNone (events.js:72:20) 
    at IncomingMessage.emit (events.js:166:7) 
    at endReadableNT (_stream_readable.js:903:12) 
    at doNTCallback2 (node.js:439:9) 
    at process._tickCallback (node.js:353:17) 

Код:

module.exports = { 
"get": function (request, response, next) { 
    request.azureMobile.user.getIdentity('microsoftaccount').then(function (data) { 
     var accessToken = data.microsoftaccount.access_token; 
     var url = 'https://apis.live.net/v5.0/me/?method=GET&access_token=' + accessToken; 
     var requestCallback = function (err, resp, body) { 
      if (err || resp.statusCode !== 200) { 
       console.error('Error sending data to the provider: ', err); 
       response.send(statusCodes.INTERNAL_SERVER_ERROR, body); 
      } else { 
       try { 
        var userData = JSON.parse(body); 
        response.send(200, userData); 
       } catch (ex) { 
        console.error('Error parsing response from the provider API: ', ex); 
        response.send(statusCodes.INTERNAL_SERVER_ERROR, ex); 
       } 
      } 
      var req = require('request'); 
     var reqOptions = { 
      uri: url, 
      headers: { Accept: "application/json" } 
     }; 
     req(reqOptions, requestCallback); 
     }; 
     }).catch(function (error) { 
     response.status(500).send(JSON.stringify(error)); 
    }); 

     //... 

}}; 

Спасибо за помощь.

+0

Возможно, этот ответ поможет вам: http://stackoverflow.com/questions/35878102/get-facebook-auth-token-from-azure-easy-api –

+0

Это изменило ошибку - теперь, мой код C#, когда я жду вызова API, он занимает очень много времени и, в конечном итоге, истекает. В моем выходе Azure я получаю «глупо: GetIdentity Request: hostname = vflash.azurewebsites.net, port = 443, path = /. Auth/me? Provider = [object Object], method = GET, + действительно длинная строка – user3007447

ответ

1

В API Documentation приложений Azure Mobile для Node.js это указывает, что метод getIdentity принимает имя поставщика проверки подлинности в качестве параметра и возвращает обещание, которое дает идентификационную информацию об успехе.

Так что ваш код должен выглядеть следующим образом:

module.exports = { 
    "get": function (req, res, next) { 
     req.azureMobile.user.getIdentity('microsoftaccount').then(function (data) { 
      var accessToken = data.microsoftaccount.access_token; 
      //... 
     }).catch(function (error) { 
      res.status(500).send(JSON.stringify(error)); 
     }); 
    } 
} 

Другой вариант, чтобы получить данные пользователя, чтобы позвонить /.auth/me конечную точку.

var https = require('https'); 

module.exports = { 
    "get": function (request, response, next) { 

     var token = request.azureMobile.user.token; 

     var options = { 
      hostname: '<yourappname>.azurewebsites.net', 
      port: 443, 
      path: '/.auth/me', 
      method: 'GET', 
      headers: { 
       'x-zumo-auth': token 
      } 
     }; 

     var req = https.request(options, (res) => { 

      var str = ''; 
      res.on('data', (d) => { 
       str += d; 
      }); 

      res.on('end', function() { 
       console.log(str); 
       response.status(200).type('application/json').json(str); 
      }); 
     }); 

     req.on('error', (e) => { 
      console.error(e); 
     }); 
     req.end(); 

    } 
} 
+0

Спасибо за помощь. Тем не менее, у меня все еще есть проблемы. Пожалуйста, если можно, взгляните на мое обновление на исходный вопрос. Извините, я действительно не знаю node.js. Спасибо! – user3007447

+0

Можете ли вы получить 'authenticationToken', который хранится в' request.azureMobile.user.token'? –

+0

Ну, независимо от того, с чем я меняю код, я продолжаю получать ту же ошибку. Я вынул все, кроме функции getIdentity и console.log и я все еще получаю неожиданный конец ошибки ввода. И мои скобки и скобки правильны. – user3007447

Смежные вопросы