app.askForSignIn(); вообще не работает

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

В моем случае я использую привязку учетной записи, и срок действия моего токена истекает через один день, поэтому, если пользователь не взаимодействует с помощником, токен больше не будет действительным. Затем, если токен окажется недействительным на веб-узле, я хочу отправить обратно «пожалуйста, снова свяжите свою учетную запись» помощнику с веб-узла.

Существует метод app.askForSignIn();, который похож на то, что мне нужно, но похоже, что он недоступен для Dialogflow и доступен только для SDK.

Итак, что я сделал:

  • Сделать намерение в Dialogflow с именем actions.intent.SIGN_IN и добавить к нему событие actions_intent_SIGN_IN
  • Когда к вебхуку приходит любой запрос, я проверяю токен, затем, если я сталкиваюсь с недопустимым токеном, я вызываю app.askForSignIn();

Что происходит:

  • Приложение только что покинуло беседу, например: тестовое приложение покинуло беседу.
  • Когда я снова говорю «поговорите с тестовым приложением», оно ведет себя так, как будто учетная запись связана, и не запрашивает привязку учетной записи, пока я вручную не перезагрузлю все приложение с помощью кнопки сброса из тестовой консоли.

Обновление:

Я попытался использовать фрагмент кода из документа (https://developers.google.com/actions/reference/nodejs/AssistantApp#askForSignIn), и он тоже не работает, вот ответ от симулятора, когда я вызываю app.askForSignIn(); из вебхука

введите здесь описание изображения


person Inzamam Malik    schedule 14.10.2017    source источник
comment
Я смущен вашим вопросом. Все работает, но срок действия токена истекает через день?   -  person Wayne Piekarski    schedule 24.10.2017
comment
да, срок действия токена истекает через 1 час, например: я начинаю с приложения-помощника, говоря «поговори с тестовым приложением», он запрашивает привязку учетной записи, затем я ввожу пароль и вхожу, и пусть я говорю, что я командую ok google ask my test app to show me attendance, и он возвращается с 4 are present out of и все все работает нормально в течение одного часа, но через час срок действия токена истекает, и когда и когда я говорю ok google ask my test app to show me attendance, он терпит неудачу, помощник не понимает, что я больше не аутентифицирован, и продолжаю использовать тот же токен, и в результате никогда не отвязать учетную запись   -  person Inzamam Malik    schedule 24.10.2017
comment
В вашем вопросе похоже, что вы пытаетесь обойти это с помощью askForSignIn()... почему это так? askForSignIn() будет работать из вашего веб-хука, вызываемого из DialogFlow.   -  person Wayne Piekarski    schedule 24.10.2017


Ответы (1)


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

Таким образом, когда Google необходимо вызвать один из API вашей службы, Google использует эти конечные точки вместе, чтобы получить разрешение от ваших пользователей на вызов этих API от их имени. Типичный сеанс OAuth 2.0, инициированный Google, имеет следующий порядок действий:

Сначала Google открывает вашу конечную точку авторизации в браузере пользователя. Пользователь входит в систему, если он еще не выполнен, и предоставляет Google разрешение на доступ к своим данным с помощью вашего API, если он еще не предоставил разрешение.

Затем ваша служба создает код авторизации и возвращает его в Google, перенаправляя браузер пользователя обратно в Google с кодом авторизации, прикрепленным к запросу.

Затем Google отправляет код авторизации на конечную точку обмена токенами, которая проверяет подлинность кода и возвращает токен доступа и токен обновления. Токен доступа — это недолговечный токен, который ваша служба принимает в качестве учетных данных для доступа к API. Токен обновления — это долгоживущий токен, который Google может хранить и использовать для получения новых токенов доступа по истечении срока их действия.

Наконец, Google вызывает API вашего сервиса, прикрепляя токен доступа к каждому запросу. Ваша служба проверяет, что токен доступа предоставляет Google авторизацию для доступа к API, а затем завершает вызов API.

person Shubhang Arora    schedule 19.08.2018