O Google+ insert momento com nodejs cliente
-
21-12-2019 - |
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)
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:
Alternar para usar o OAuth de apoio que está incluído no google-api-nodejs-cliente
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;
}