1

Я пытаюсь получить детали профиля пользователя в узле.Получить google + профиль пользователя в узле, используя только токен доступа

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

var request = require('request'); 

request('https://www.googleapis.com/oauth2/v2/userinfo?access_token=' + access_token, function(err, res, body) { 
    if (err) return callback(err); 

    if (res.statusCode != 200) { 
    return callback(new Error('Invalid access token: ' + body)); 
    } 
    else { 
    var me; 
    try { me = JSON.parse(body);} 

    catch (e) { 
     return callback(new Error('Unable to parse user data: ' + e.toString())); 
    } 

    console.log('user profile:', me); 
    } 
}); 

Это работает, но иногда я получаю плохую реакцию как нулевая displayName поле нулевой email (хотя у меня есть объем), и это ненадежно в целом ,

Я попытался использовать Google API Node module, но поток там предполагает, что мне нужно получить токен и излишне сложно.

Кроме этого, я не понимаю разницы между версиями API Google и не знаю, когда им пользоваться.

EDIT

кажется, что проблема с нулевым displayName поле происходит только с жетонами, которые были созданы с помощью IOS SDK. Токены, созданные с помощью Android SDK, прекрасны, и вызов API с ними разрешается в displayName. Я попытался с КСН маркер и вызвав следующий API:

https://www.googleapis.com/plus/v1/people/me?access_token=... 

я получил displayName в результате, но после нескольких звонков с моего сервера я получил

{ 
"error": { 
    "errors": [ 
    { 
    "domain": "usageLimits", 
    "reason": "dailyLimitExceededUnreg", 
    "message": "Daily Limit for Unauthenticated Use Exceeded. Continued use requires signup.", 
    "extendedHelp": "https://code.google.com/apis/console" 
    } 
    ], 
    "code": 403, 
    "message": "Daily Limit for Unauthenticated Use Exceeded. Continued use requires signup." 
} 
} 

ответ

3

Проблема была выделена в токенов, созданных только моими пользователями IOS.

Кажется, что токен, который я получал через SDK IOS, был плохим для использования с вызовом API, о котором я упомянул в своем вопросе (https://www.googleapis.com/oauth2/v2/userinfo). Токены, созданные Android SDK, работали нормально с упомянутым звонком.

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

https://www.googleapis.com/plus/v1/people/me?access_token=... 

Вы должны получить объект, подобный как этот (опущено личные поля):

{ 
    kind:"plus#person", 
    etag:"...", 
    gender:"male", 
    emails:[ 
    { 
     value:"...", 
     type:"account" 
    } 
    ], 
    urls:[ 
    { 
     value:"...", 
     label:"Buzz" 
    } 
    ], 
    objectType:"person", 
    id:"...", 
    displayName:"...", 
    name:{ 
    familyName:"...", 
    givenName:"..." 
    }, 
    url:"...", 
    image:{ 
    url:"..." 
    }, 
    isPlusUser:true, 
    language:"en", 
    ageRange:{ 
    min:21 
    }, 
    verified:false, 
    cover:{ 
    layout:"banner", 
    coverPhoto:{ 
     url:"...", 
     height:626, 
     width:940 
    }, 
    coverInfo:{ 
     topImageOffset:0, 
     leftImageOffset:0 
    } 
    } 
} 
Смежные вопросы