Можно ли выполнить вход через API Google со стороны сервера и передать результат пользователю? - PullRequest
0 голосов
/ 30 апреля 2020

У меня есть приложение, которое клиенты могут выбрать время, чтобы забронировать видео-встречу, и я просто хочу отправить им ссылку на Google Hangouts Meet. Для этого я использую Google Calendar API в моем JavaScript коде из этого документа https://developers.google.com/calendar/create-events, он работает, и я могу создать прекрасную ссылку. Но мой вопрос заключается в том, можно ли каким-либо образом создать ссылку на основе времени, выбранного на стороне сервера (node js) с учетной записью Gsuite, и просто отправить им ссылку в конце? (Я не хочу создавать события в своем календаре Google или отправлять им уведомления от Google) Я не хочу, чтобы пользователь запрашивал страницу входа Google для авторизации. Мне просто нужно создать ссылку и отправить ее клиенту. Это возможно? Я ценю любое предложение.

1 Ответ

0 голосов
/ 05 мая 2020

Использование кода из этого руководства для аутентификации с помощью учетной записи службы и поиска в этом примерах из репозитория google-auth nodejs, чтобы узнать, как установить subject Параметр, который используется для олицетворения пользователя, я смог получить аутентифицированный объект клиента JWT auth, который можно использовать для выполнения запросов Google API, таких как , перечисляющих события этого пользователя:

let google = require('googleapis').google;
let privatekey = require("./[JSON-FILENAME].json");

// configure a JWT auth client
let jwtClient = new google.auth.JWT(
    privatekey.client_email,
    null,
    privatekey.private_key,
    ['https://www.googleapis.com/auth/calendar'],
    '[EMAIL-OF-USER-TO-IMPERSONATE]'
);
//authenticate request
jwtClient.authorize(function (err, tokens) {
    if (err) {
        console.log(err);
        return;
    } else {
        console.log("Successfully connected!");
    }
});

listEvents(jwtClient);

function listEvents(auth) {
    const calendar = google.calendar({ version: 'v3', auth });
    calendar.events.list({
        calendarId: 'primary',
        timeMin: (new Date()).toISOString(),
        maxResults: 10,
        singleEvents: true,
        orderBy: 'startTime',
    }, (err, res) => {
        if (err) return console.log('The API returned an error: ' + err);
        const events = res.data.items;
        if (events.length) {
            console.log('Upcoming 10 events:');
            events.map((event, i) => {
                const start = event.start.dateTime || event.start.date;
                console.log(`${start} - ${event.summary}`);
            });
        } else {
            console.log('No upcoming events found.');
        }
    });
}
...