关注此documentation我成功地为服务器端应用程序执行 Google 登录,并可以在服务器端使用 Python 访问用户的 GoogleCalendar。我无法使用 NodeJS 做到这一点。
简而言之 - 在 Python 中,我使用了从浏览器发送的 auth_code
并获得了如下凭证:
from oauth2client import client
credentials = client.credentials_from_clientsecrets_and_code(
CLIENT_SECRET_FILE,
['https://www.googleapis.com/auth/drive.appdata', 'profile', 'email'],
auth_code)
然后我可以在数据库中存储以下值:
gc_credentials_json = credentials.to_json()
并生成凭据(是的,它在需要时单独使用刷新 token ):
client.Credentials.new_from_json(gc_credentials_json)
所以我想使用 NodeJS 做同样的事情:
仅使用以下内容即可轻松生成凭据:
CLIENT_SECRET_FILE
、scopes
和auth_code
(就像我使用 Python 所做的那样)使用以前的凭据值接收凭据,而不分析访问 token 是否过期 - 我更喜欢现成的(经过社区充分测试)解决方案
提前谢谢您!
最佳答案
我已经使用 google-auth-library
包实现了它。
这是检索 gcClient 的函数:
const performAuth = async () => {
const tokens = await parseTokenFromDB();
const auth = new OAuth2Client(
downloadedCredentialsJson.web.client_id,
downloadedCredentialsJson.web.client_secret
);
auth.on('tokens', async (newTokens) => {
updateDBWithNewTokens(newTokens);
});
await auth.setCredentials(tokens);
const gcClient = google.calendar({version: 'v3', auth});
return gcClient;
};
这是 parseTokenFromCurrentDB
函数的模板,只是为了给出其输出的想法:
const parseTokenFromCurrentDB = async () => {
// Put here your code to retrieve from DB the values below
return {
access_token,
token_type,
refresh_token,
expiry_date,
};
};
因此,使用此实现可以获得gcClient
:
const gcClient = await gc.getGcClient(org);
并使用它的方法,例如:
const gcInfo = await gc.getInfo(gcClient);
const events = await gc.getEvents(gcClient, calcPeriodInGcFormat());
关于node.js - NodeJS : Google Sign-In for server-side apps,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51450853/