Pergunta

Alguém já foi capaz de obter o google-api-nodejs-cliente para inserir com êxito um momento?

O que quer que eu tente, eu recebo um genérico 400 "valor Inválido" erro, mas sou incapaz de reduzir o valor inválido porque o API Explorer não quer trabalhar.

Seria por causa da falta de dados requestvisibleactions parâmetro?Eu estou usando passport.js's require('passport-google-oauth').OAuth2Strategy para a manipulação de acesso oauth, e essa parte está funcionando bem, mas eu não tenho nenhuma idéia de como incorporar requestvisibleactions para o oauth pedido de fluxo uma vez que este é, definitivamente, não proveniente de uma clientside formulário.

Aqui está um trecho do que eu estou tentando fazer (usando a versão mais recente do 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)
  }
})

ref 1 (out-of-date w.r.t.uma versão mais antiga do googleapis)

ref 2 (do lado do cliente, onde o uso de dados-requestvisibleactions é mais óbvio)

Foi útil?

Solução

Como você especulado, você precisa o request_visible_actions parâmetro como parte da URL chamada oauth ponto final.

Parece que a versão atual do passaporte-google-oauth não oferece suporte a este parâmetro.A julgar por várias das questões em aberto e pull requests, não é claro que o autor vai responder às solicitações para adicionar a ele.Você tem duas opções possíveis:

  1. Alternar para usar o OAuth de apoio que está incluído no google-api-nodejs-cliente

  2. Patch de passaporte-google-oauth código.(E, eventualmente, enviar uma solicitação de pedido, na esperança de que seja útil para alguém.)

Eu não uso passport.js ou o passaporte no módulo em questão, então eu não posso testar isso, mas com base no repositório do github, eu acho que você pode inserir o seguinte no lib/passport-google-oauth/oauth2.js após a linha 136 e antes a instrução de retorno:

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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top