Доступ к Google Apis от имени домашнего пользователя Google - PullRequest
1 голос
/ 06 апреля 2019

Я пытаюсь разработать простой ProofOfConcept для взаимодействия с API Google из Google Home, используя авторизацию пользователя через Dialogflow Fullfilment.

Например, мы хотим иметь возможность создавать / читать / обновлять / удалять контакты пользователей.

Реализовать Google SignIn относительно легко, но я не знаю, как запросить дополнительные области действия

Кроме того, я никогда ранее не реализовывал сервер OAuth, и я до сих пор не уверен, что мне это тоже нужно или я мог бы повторно использовать существующий.

Я просмотрел много постов здесь, поэтому на большинство из них ответил @Prisoner, который также предоставил подробный поток Код авторизации Google Home и аутентификация с помощью аккаунта Google

В своем ответе он упоминает, что мы можем «перенаправить пользователя на страницу входа в сеть», но я до сих пор не понимаю, как это сделать из полной версии

Вот полный код, который я использовал для входа в Google:

//requirements
const { dialogflow, SignIn} = require('actions-on-google');
const functions = require('firebase-functions');

//initialisation
const app = dialogflow(
{
    debug: true,

    // REPLACE THE PLACEHOLDER WITH THE CLIENT_ID OF YOUR ACTIONS PROJECT
    clientId: '1111111111111-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.apps.googleusercontent.com'
});

//Welcome Intent
app.intent('Default Welcome Intent', (conv) => {
    conv.ask(`Welcome to the demo agent, say "Connect-me" to proceed`);
}); 

//Default Intent
app.intent('Default Fallback Intent', (conv) => {
    conv.ask(`Sorry, can you repeat please?`);
}); 

//Intent starting the Google SignIn
//  Create an intent with the name "Start Signin"
app.intent('Start Signin', (conv) => {
    //SignIn Helper (https://developers.google.com/actions/assistant/helpers#account_sign-in)
    conv.ask(new SignIn(`Need to identify you`));
});


//Intent called when the user complete the authentication
//  Create an intent with the name "Get Signin" and assign it the event "actions_intent_SIGN_IN"
app.intent('Get Signin', (conv, params, signin) => {
    if (signin.status === 'OK') {
        const payload = conv.user.profile.payload;

        conv.ask(`Hello ${payload.name}. You can now access your contacts informations...  but not really `);
    } else {
        conv.ask(`Sorry but you should authentify yourself `);
    }
});

//Example of intent that I would like to make it works
app.intent('How many contacts', (conv) => {
    /*
    TODO: How to ask for additional scopes ("https://www.google.com/m8/feeds/" : read/write access to Contacts and Contact Groups)
    NOTE: Actually, I'm more interrested on how to get the additional scopes.  
          I could probably do the querying contacts part by myself since it's quite documented (https://developers.google.com/contacts/v3/)
    */

    conv.ask(new SignIn(`You have ${nbContacts} contacts defined in your Google Contact`));
});

exports.dialogflowFirebaseFulfillment = functions.https.onRequest(app);

1 Ответ

0 голосов
/ 06 апреля 2019

У вас есть несколько связанных вопросов здесь.

Как запросить дополнительные области при входе в Google?

К сожалению, вы не можете.

Это для безопасности пользователя. Так как это не всегда очевидно, когда вы предоставляете дополнительные разрешения с помощью голоса, и запрос слишком большого количества областей может быть чрезмерным с голосом, они не позволяют это прямо сейчас.

Ok. Итак, как мне получить эти дополнительные области?

Вы ссылались на другой пост, в котором рассказывается о методе, который я предлагаю сделать. Это включает в себя вход и предоставление областей через веб-страницу в том же Google Cloud Project. В системе Google идентификация между клиентами они будут применяться, когда пользователь также подключается через Помощника.

Так как мне направить их на веб-страницу?

Обычно я использую карту с кнопкой ссылки для веб-сайта или ссылку для предложения на сайт. Оба из них, однако, зависят от наличия визуального интерфейса, который поддерживает веб-браузер. Так что вы можете проверить это, используя возможности поверхности .

Если вы используете свой собственный сервер OAuth, используя комбинацию «OAuth и Google Sign-In» метод , помощник позаботится о таких вещах для вас.

Нужно ли мне писать свой собственный сервер OAuth?

Нет. Вы можете использовать что-то вроде Auth0 для обработки части OAuth для вас.

...