Момент вставки Google+ с клиентом nodejs

Кто-нибудь смог заставить google-api-nodejs-client успешно вставить момент?

Что бы я ни пытался, я получаю общую ошибку 400 "Недопустимое значение", но не могу сузить недопустимое значение, потому что API Explorer тоже не работает.

Может ли это быть из-за отсутствия параметра data-requestvisibleactions? Я использую require('passport-google-oauth').OAuth2Strategy для обработки доступа по протоколу oauth для обработки доступа по протоколу oauth с помощью файла require('passport-google-oauth').OAuth2Strategy отpassport.js, и эта часть работает нормально, но я понятия не имею, как включить requestvisibleactions в поток запросов по протоколу oauth, поскольку он определенно не исходит из формы на стороне клиента.

Вот фрагмент того, что я пытаюсь сделать (используя последнюю версию googleapis, v1.0.2):

var google = require('googleapis')
var auth = new google.auth.OAuth2()
auth.setCredentials({
  'access_token': user.token
})

google.plus('v1').moments.insert({
  collection: 'vault',
  userId: 'me',
  debug: true,
  resource: {
    type: "http://schemas.google.com/AddActivity",
    target: {
      type: "http://schema.org/CreativeWork",
      url: "...omitted...",
      image: "...omitted...",
      description: "test",
      name: "test"
    }
  },
  auth: auth
}, function (err, response) {
  if (err) {
    console.error(err)
    res.send(err.code, err)
  } else {
    console.log(response)
    res.send(200)
  }
})

ссылка 1 (устарело по сравнению с более старой версией googleapis)

ссылка 2 (на стороне клиента, где использование data-requestvisibleactions более очевидно)


person fisch2    schedule 29.07.2014    source источник


Ответы (1)


Как вы и предполагали, вам нужен параметр request_visible_actions как часть URL-адреса, вызывающего конечную точку oauth.

Похоже, текущая версия паспорта-google-oauth не поддерживает этот параметр. Судя по нескольким открытым проблемам и запросам на включение, неясно, будет ли автор отвечать на запросы о его добавлении. У вас есть два возможных варианта:

  1. Переключитесь на использование поддержки OAuth, включенной в google-api-nodejs-client.

  2. Исправьте код паспорт-google-oauth. (И, возможно, отправьте запрос на включение в надежде, что он будет полезен кому-то еще.)

Я не использую паспорт.js или рассматриваемый модуль паспорта, поэтому я не могу это проверить, но, основываясь на репозитории github, я думаю, что вы можете вставить следующее в lib/passport-google-oauth/oauth2.js после строки 136 и перед оператором возврата:

if (options.requestVisibleActions) {
  // Space separated list of allowed app actions
  // as documented at:
  //  https://developers.google.com/+/web/app-activities/#writing_an_app_activity_using_the_google_apis_client_libraries
  //  https://developers.google.com/+/api/moment-types/
  params['request_visible_actions'] = options.requestVisibleActions;
}
person Prisoner    schedule 30.07.2014
comment
Спасибо @Prisoner - определенно отличная поломка. Я применил предложенный вами патч здесь, но теперь я получаю ошибку 401 Invalid Credentials (ранее была ошибка 400 Invalid Value). Я определенно думаю, что это правильный путь, и отвечу, если выясню, что происходит не так. Спасибо еще раз за помощь! - person fisch2; 31.07.2014
comment
В зависимости от того, когда вы впервые прошли аутентификацию, срок действия вашего токена может быть истёк, и похоже, что вы не используете токен обновления. - person Prisoner; 31.07.2014
comment
@ fisch2, тебе помогло? Если да, можете ли вы поделиться обработчиком маршрута? Мой похож на app.get('/auth/google', redirect, passport.authenticate('google', { scope: ['https://www.googleapis.com/auth/userinfo.profile', 'https://www.googleapis.com/auth/userinfo.email', 'https://www.googleapis.com/auth/plus.me', 'https://www.googleapis.com/auth/plus.moments.write'], accessType: 'offline' }));, но это не сработало. - person Sparky; 15.01.2015
comment
@Sparky - Вы можете открыть новый вопрос, указав детали вашего запроса и детали того, что это не сработало. Но похоже, что вы не указываете параметр request_visible_actions, как мы обсуждали. - person Prisoner; 15.01.2015
comment
@Prisoner, спасибо, на самом деле я открыл новый вопрос здесь stackoverflow.com/q/27896015/559221 - person Sparky; 15.01.2015