Я сделал панель инструментов Google Analytics, которая обновляет токен в интервале. Администратор выбирает профиль GA, и он замышляет вещи. Мне нужно использовать кучу вещей, чтобы сделать это:
Npm Integration - простота в использовании. Просто взгляните, как заставить методы вызвать синхронизацию.
google-api-nodejs-client [alpha] - Интеграция с Npm выше. Он освежает маркер для вас автоматически, когда вы Make Authenticated Requests
Если вы не хотите использовать Google-АПИС-nodejs-клиент, чтобы обновить свой маркер, вы можете использовать этот код, который я сделал, чтобы обновить маркер самостоятельно:
var googleAccount = Accounts.loginServiceConfiguration.findOne({service: 'google'});
CLIENT_ID = googleAccount.clientId;
CLIENT_SECRET = googleAccount.secret;
REDIRECT_URL = '/_oauth/google?close';
var googleapis = Meteor.require('googleapis'),
OAuth2Client = googleapis.OAuth2Client,
client = getClient();
function getClient() {
var client = Meteor.sync(function (done) {
googleapis.discover('analytics', 'v3').execute(function (err, client) {
done(err, client);
});
});
if (client.err)
throw new Meteor.Error(400, 'Client not received');
return client.result;
}
function getOAuth2Client (user) {
var accessToken = user.services.google.accessToken,
refreshToken = user.services.google.refreshToken,
oauth2Client = new OAuth2Client(CLIENT_ID, CLIENT_SECRET, REDIRECT_URL);
if (user.services.google.expiresAt < +(new Date())) {
var res = Meteor.http.call("POST", "https://accounts.google.com/o/oauth2/token",
{params: {
grant_type : 'refresh_token',
refresh_token : refreshToken,
client_id : CLIENT_ID,
client_secret : CLIENT_SECRET
}, headers: {
"content-type": "application/x-www-form-urlencoded"
}});
accessToken = res.data.access_token;
Meteor.users.update({_id: user._id}, {$set: {
'services.google.accessToken': accessToken,
'services.google.expiresAt': +(new Date()) + (1000 * res.data.expires_in)
}});
}
oauth2Client.credentials = {
access_token: accessToken,
refresh_token: refreshToken
};
return oauth2Client;
}
Meteor.methods({
'getAccounts': function() {
var user = Meteor.users.findOne({_id: this.userId}),
oauth2Client = getOAuth2Client(user),
accounts = getAccounts(oauth2Client, client);
return accounts;
}
});
Извините, что покойно принимаете; это работает отлично. Благодаря! – troytc
No prob :) Рад, что это сработало! – gabrielhpugliese
Это обеспечило отличную базу для моей реализации этого. «google-api-nodejs-client» также существует с тех пор. – wizonesolutions