2016-01-12 4 views
1

Для пользователей, которые разрешили службе получать доступ к своим данным, я хотел бы реализовать функцию для извлечения и обработки этих данных.Как получить данные пользователя из API Google?

Когда пользователь выполняет проверку подлинности в первый раз, появляется следующий экран: enter image description here

В консоли разработчика Google я создал учетную запись службы, проверяются «Включить Google Apps Domain-Wide Делегирование», и загрузить JSON файл и включить его в следующем коде:

var google = require('googleapis'); 
var OAuth2 = google.auth.OAuth2; 
var fit = google.fitness('v1'); 
var key = require('../../config/meelio_google_service_account.json'); 

/* 
This file contains following properties: 
{ 
    "type": "service_account", 
    "project_id": "meelio-dev", 
    "private_key_id": "***", 
    "private_key": "-----BEGIN PRIVATE KEY----- 
***", 
    "client_email": "[email protected]", 
    "client_id": "1022202xxx41842", 
    "auth_uri": "https://accounts.google.com/o/oauth2/auth", 
    "token_uri": "https://accounts.google.com/o/oauth2/token", 
    "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", 
    "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/mfit-205%40meelio-dev.iam.gserviceaccount.com" 
} 
*/ 

var oauth2Client = new OAuth2(key.client_id, key.private_key, 'http://localhost:3000/api/auth/google/oauth2callback'); 

var scopes = ['https://www.googleapis.com/auth/fitness.activity.read', 
    'https://www.googleapis.com/auth/fitness.activity.write', 
    'https://www.googleapis.com/auth/fitness.body.read', 
    'https://www.googleapis.com/auth/fitness.body.write', 
    'https://www.googleapis.com/auth/fitness.location.read', 
    'https://www.googleapis.com/auth/fitness.location.write']; 

module.exports.listUserDataSourcesTest = function(req, res){ 
    var jwtClient = new google.auth.JWT(key.client_email, null, key.private_key, scopes, null); 

    jwtClient.authorize(function(err, tokens) { 
     if (err) { 
      console.log(err); 
      return; 
     } 
     oauth2Client.setCredentials({ 
      access_token: tokens.access_token 
     }); 
     // Make an authorized request to list Drive files. 
     fit.users.dataSources.list({auth: oauth2Client, userId: '104169835623446790746'}, function(err, resp){ 
      console.log(resp); 
     }); 

    }); 
} 

Когда функция пригодности Google выполняется (fit.user.dataSources.list()) возвращает ошибку:

"Unauthorized access"

Поскольку я не уверен, вызвана ли ошибка неправильными настройками (или другими) или неправильным кодом, я был бы очень благодарен, если бы кто-нибудь мог помочь решить эту проблему, предложив правильный способ получить данные пользователя и/или исправить настройки в консоли разработчика Google.

Спасибо!

ответ

0

По documentation не представляется возможным использовать другой пользователь ID:

Retrieve a dataset for the person identified. Use me to indicate the authenticated user. Only me is supported at this time.

Располагая пользователь лексем и access_token (например, хранящийся в базе данных), то можно получить данные с помощью следующей функции:

function listUserDataSources(access_token, refresh_token, res){ 
    oauth2Client.setCredentials({ 
       access_token: tokens.token, 
       refresh_token: tokens.refreshToken 
      }); 
    fit.users.dataSources.list({auth: oauth2Client, userId: 'me'}, function(err, resp){ 
       res.json([resp]);  

    }); 
} 
Смежные вопросы