Pregunta

¿Alguien ha podido lograr que google-api-nodejs-client inserte correctamente un momento?

Independientemente de lo que intento, aparece un error genérico 400 "Valor no válido" pero no puedo limitar el valor no válido porque el Explorador de API tampoco funciona.

¿Será por la falta del parámetro data-requestvisibleactions?Estoy usando pasaporte.js require('passport-google-oauth').OAuth2Strategy para manejar el acceso oauth, y esa parte está funcionando bien, pero no tengo idea de cómo incorporar requestvisibleactions en el flujo de solicitud oauth ya que definitivamente no se origina en un formulario del lado del cliente.

Aquí hay un fragmento de lo que estoy tratando de hacer (usando la última versión de 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)
  }
})

referencia 1 (desactualizado w.r.t.una versión anterior de googleapis)

referencia 2 (del lado del cliente, donde el uso de acciones visibles de solicitud de datos es más obvio)

¿Fue útil?

Solución

Como especulaste, necesitas el request_visible_actions parámetro como parte de la URL que llama al punto final oauth.

Parece que la versión actual de pasaporte-google-oauth no admite este parámetro.A juzgar por varios de los problemas abiertos y solicitudes de extracción, tampoco está claro si el autor responderá a las solicitudes para agregarlo.Tienes dos opciones posibles:

  1. Cambie a utilizar la compatibilidad con OAuth que se incluye en google-api-nodejs-client

  2. Parche el código de pasaporte-google-oauth.(Y posiblemente envíe una solicitud de extracción con la esperanza de que sea útil para otra persona).

No uso pasaporte.js ni el módulo de pasaporte en cuestión, por lo que no puedo probar esto, pero según el repositorio de github, creo que puedes insertar lo siguiente en lib/pasaporte-google-oauth/oauth2.js después de la línea 136 y antes de la declaración de devolución:

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;
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top