我正在爲YouTube創建一個應用程序,該應用程序利用Content Owners的一些Analytics API。 API需要具有足夠權限的用戶登錄,然後誰可以檢索我們應用程序的所有用戶的報告。在MeteorJS中爲後端流程使用單獨的Google帳戶
目前我們的應用程序可以獲得YouTube用戶ID,這很好,但我們需要一個單獨的帳戶(除當前用戶以外)使用登錄用戶的ID向API發出請求。
我該如何實現這樣的設置?我知道這將涉及使用脫機身份驗證並定期刷新訪問令牌,但我不太確定如何執行此操作。
我正在爲YouTube創建一個應用程序,該應用程序利用Content Owners的一些Analytics API。 API需要具有足夠權限的用戶登錄,然後誰可以檢索我們應用程序的所有用戶的報告。在MeteorJS中爲後端流程使用單獨的Google帳戶
目前我們的應用程序可以獲得YouTube用戶ID,這很好,但我們需要一個單獨的帳戶(除當前用戶以外)使用登錄用戶的ID向API發出請求。
我該如何實現這樣的設置?我知道這將涉及使用脫機身份驗證並定期刷新訪問令牌,但我不太確定如何執行此操作。
我已經完成了一個Google Analytics儀表板,可以在一段時間內刷新令牌。管理員選擇GA配置文件並繪製事物。我需要使用一堆東西來做到這一點:
Npm Integration - 如此容易使用。只要看看如何使方法調用同步。
google-api-nodejs-client [alpha] - 將它與上面的Npm集成。它會自動刷新你的令牌當你Make Authenticated Requests
如果你不希望使用谷歌的API-的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
沒有問題:)很高興工作! – gabrielhpugliese
這爲我實現這個提供了一個很好的基礎。自那時起,'google-api-nodejs-client'也出現了。 – wizonesolutions