Действие Google не предоставляет объект user.profile.payload после успешной привязки аккаунта - PullRequest
3 голосов
/ 11 июля 2019

Я следовал этому руководству, чтобы создать ссылку на учетную запись в моем приложении https://developers.google.com/actions/identity/google-sign-in#json

Я могу проверить декодер jwt пользователя и отправить ответ, авторизованный пользователем.Затем, согласно руководству, в следующем запросе я должен получить полезную нагрузку профиля пользователя (user.profile.payload в структуре json), но она отсутствует в следующем запросе.Более того, я снова получаю tokenId для проверки jwt.Я думаю, что то, что я здесь упускаю, находится в объекте возможного объекта, но я не уверен, так как я не видел никакой документации для этого, потому что я работаю с сервером asp.net.Существуют SDK с документацией только для java и nodeJS

. Это запрос, предоставленный для входа в систему, содержащий tokenId

{
  "user": {
    "locale": "en-US",
    "lastSeen": "2019-07-11T14:18:10Z",
    "idToken": "<tokenId>",
    "userVerificationStatus": "VERIFIED"
  },
  "conversation": {
    "conversationId": "ABwppHH9uZfcKj6pS6A6wItKC1dOXuZJ5oFYt2Og7cqrElSQYC9bv-aV7iQ5FDYaJPp-fa7tQNhc2yS0fw3QBu-M",
    "type": "ACTIVE",
    "conversationToken": "e0e78f40-a207-49c2-9050-50c6ed526c24"
  },
  "inputs": [
    {
      "intent": "actions.intent.SIGN_IN",
      "rawInputs": [
        {
          "inputType": "KEYBOARD"
        }
      ],
      "arguments": [
        {
          "name": "SIGN_IN",
          "extension": {
            "@type": "type.googleapis.com/google.actions.v2.SignInValue",
            "status": "OK"
          }
        },
        {
          "name": "text"
        }
      ]
    }
  ],
  "surface": {
    "capabilities": [
      {
        "name": "actions.capability.SCREEN_OUTPUT"
      },
      {
        "name": "actions.capability.ACCOUNT_LINKING"
      },
      {
        "name": "actions.capability.AUDIO_OUTPUT"
      },
      {
        "name": "actions.capability.MEDIA_RESPONSE_AUDIO"
      },
      {
        "name": "actions.capability.WEB_BROWSER"
      }
    ]
  },
  "isInSandbox": true,
  "requestType": "SIMULATOR"
}

. Это ответ, который я предоставляю после проверки пользователя.Я пробовал это с обоими намерениями action.intent.TEXT и actions.intent.SIGN_IN, но безуспешно.следующий запрос снова предоставляется со свойством user.idToken вместо user.profile (который должен содержать полезную нагрузку)

{
  "conversationToken": "b09d915e-6df9-496d-acde-b76858cd95b4",
  "expectUserResponse": true,
  "expectedInputs": [
    {
      "inputPrompt": {
        "richInitialPrompt": {
          "items": [
            {
              "simpleResponse": {
                "textToSpeech": "Hi",
                "displayText": "Hi"
              }
            }
          ],
          "suggestions": []
        }
      },
      "possibleIntents": [
        {
          "intent": "actions.intent.TEXT",
          "inputValueData": {
            "@type": "type.googleapis.com/google.actions.v2.SignInValue",
            "status": "OK"
          }
        }
      ]
    }
  ]
}

1 Ответ

3 голосов
/ 11 июля 2019

Атрибут user.profile, о котором вы говорите, предоставляется библиотекой Actions-on-Google для JavaScript.Это не в JSON, который вы получите.Но ...

Вам это не нужно, потому что основная информация профиля (имя, адрес электронной почты и Google ID) закодирована в user.idToken.Эта строка, которая будет отправляться вам для каждого запроса, является просто токеном JWT, который вы можете проверять и декодировать.Профиль будет в разделе «Полезная нагрузка».

Я не знаю c #, но https://jwt.io/ содержит список библиотек, которые могут декодировать строку JWT для вас, чтобы вы могли прочитать "Полезная нагрузка ".

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

Если вы не хотите декодировать ее, вы можете декодировать ее при первой проверке, получить необходимую информациюи сохраните эту информацию в строке userStorage (при условии, что вы не ожидаете, что она изменится).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...