Ошибка MISSING_CUSTOM_TOKEN в firebase во время скручивания "https://identitytoolkit.googleapis.com/v1 - PullRequest
0 голосов
/ 21 апреля 2020

Цель: я хочу узнать, как использовать пользовательские токены с FireStore.

Предварительно: я пытаюсь следовать примеру firebase curl by

curl "https://identitytoolkit.googleapis.com/v1/accounts:signInWithCustomToken?key=AIzaSyCO0B7UXo2OcfhXQ2gBxHAPuN5muusiIFw" -H 'Content-Type: application/json' --data-binary '{"token":"123456","returnSecureToken":true}' 

, и я получил

{
  "error": {
    "code": 400,
    "message": "MISSING_CUSTOM_TOKEN",
    "errors": [
      {
        "message": "MISSING_CUSTOM_TOKEN",
        "domain": "global",
        "reason": "invalid"
      }
    ]
  }
}
curl: (6) Could not resolve host: application

Команда curl, указанная выше, была заполнена моим «Ключом Firebase Web API», скопированным из Firebase / My Project / General / Web Api Key. Затем я добавил токен только для проверки «123456». Если я правильно понял документацию, я должен вернуть токен.

Моя конечная цель - добавить пользовательский токен в мой проект Firebase, который позволяет клиенту Angular подключаться к Firestore и получать уведомления, когда документ изменено.

Для создания токена Custon лучший шаг, который я нашел, - это Stackoverflow Custom Token Question . Поэтому я пытаюсь создать его: 1021 *

и я получил

C:\WSs\FireStoreDemos\firestore-custom-token>node server
C:\WSs\FireStoreDemos\firestore-custom-token\node_modules\firebase-admin\lib\auth\token-generator.js:205
            throw new error_1.FirebaseAuthError(error_1.AuthClientErrorCode.INVALID_ARGUMENT, errorMessage);
            ^

FirebaseAuthError: `developerClaims` argument must be a valid, non-null object containing the developer claims.
    at FirebaseAuthError.FirebaseError [as constructor] (C:\WSs\FireStoreDemos\firestore-custom-token\node_modules\[4mfirebase-admin[24m\lib\utils\error.js:42:28)
    at FirebaseAuthError.PrefixedFirebaseError [as constructor] (C:\WSs\FireStoreDemos\firestore-custom-token\node_modules\[4mfirebase-admin[24m\lib\utils\error.js:88:28)
    at new FirebaseAuthError (C:\WSs\FireStoreDemos\firestore-custom-token\node_modules\[4mfirebase-admin[24m\lib\utils\error.js:147:16)
    at FirebaseTokenGenerator.createCustomToken (C:\WSs\FireStoreDemos\firestore-custom-token\node_modules\[4mfirebase-admin[24m\lib\auth\token-generator.js:205:19)
    at Auth.BaseAuth.createCustomToken (C:\WSs\FireStoreDemos\firestore-custom-token\node_modules\[4mfirebase-admin[24m\lib\auth\auth.js:94:36)
    at Object.<anonymous> (C:\WSs\FireStoreDemos\firestore-custom-token\server.js:12:14)
[90m    at Module._compile (internal/modules/cjs/loader.js:1147:30)[39m
[90m    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1167:10)[39m
[90m    at Module.load (internal/modules/cjs/loader.js:996:32)[39m
[90m    at Function.Module._load (internal/modules/cjs/loader.js:896:14)[39m {
  errorInfo: {
    code: [32m'auth/argument-error'[39m,
    message: [32m'`developerClaims` argument must be a valid, non-null object containing the developer claims.'[39m
  },
  codePrefix: [32m'auth'[39m
}

Итак, мой главный вопрос: чего мне не хватает, чтобы создать Custom Token с curl выше? Так как это пользовательский токен, по крайней мере для Hello World, я могу использовать очень простой токен, такой как «123456», верно?

Дополнительный вопрос, на сервере выше. js, я предоставляю право ожидается файл в admin.credential.cert?

1 Ответ

1 голос
/ 21 апреля 2020

Исходя из моего понимания Firebase Custom Token Auth, вы не можете отправить простой незашифрованный токен как этот. Чтобы это работало, вам нужно сгенерировать токен на основе uid, который может быть 123456 с использованием того же кода, который у вас уже был:

const customToken = await admin.auth().createCustomToken("123456")

Затем использовать этот customToken для выполните тестовый запрос команды curl.

На ваш второстепенный вопрос ввод учетной записи службы в команду admin.credential.cert() является правильным, и если вы сравните фактический файл .json с примером, приведенным в Официальная Облачная документация IAM , все кажется правильным.

Единственное, что может вызвать проблемы, - это если ваше private_key, private_key_id или любое другое поле, которое необходимо заменить, неверно, но это может быть проверено только вами.

Надеюсь, это поможет вам.

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