firebase-admin auth error при вызове 'getUser', но отлично работает при вызове verifyToken

72
8

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

Затем я перешел к использованию API администратора Firebase для получения пользовательских данных от аутентификации Firebase.

Код выглядит так:

import * as admin from 'firebase-admin'

const auth = admin.auth()
auth.verifyIdToken(idToken)
.then(decodedToken => decodedToken.user_id)
.then(uid => {
auth.getUser(user_id)
.then((userRecord) => {
console.log("Successfully fetched user data:", userRecord.json());
})
.catch(function(error) {
console.log("Error fetching user data:", error);
});
})

Тогда я получил ошибку:

Error fetching user data: Error: error:0906D06C:PEM routines:PEM_read_bio:no start line
at Error (native)
at Sign.sign (crypto.js:283:26)
at Object.sign (~/app/node_modules/jwa/index.js:55:45)
at Object.jwsSign [as sign] (~/app/node_modules/jws/lib/sign-stream.js:23:24)
at Object.module.exports [as sign] (~/app/node_modules/firebase-admin/node_modules/jsonwebtoken/sign.js:144:16)
at CertCredential.createAuthJwt_ (~/app/node_modules/firebase-admin/lib/auth/credential.js:190:20)
at CertCredential.getAccessToken (~/app/node_modules/firebase-admin/lib/auth/credential.js:162:26)
at SignedApiRequestHandler.sendRequest (~/app/node_modules/firebase-admin/lib/utils/api-request.js:110:32)
at ~/app/node_modules/firebase-admin/lib/auth/auth-api-request.js:381:50
at process._tickDomainCallback (internal/process/next_tick.js:129:7)

Это может быть ошибкой разрешения, в соответствии с этой догадкой, я обнаружил, что это может быть связано с этой проблемой в stackoverflow:

Firebase admin(). Auth(). GetUser (uid) Ошибка: произошла внутренняя ошибка 'auth/internal-error'

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

Любое предложение будет полезно для меня.

спросил(а) 2017-01-25T13:27:00+03:00 3 года, 10 месяцев назад
1
Решение
58

Мой лучший выбор в отношении того, что происходит, заключается в том, что закрытый ключ в ключевом файле учетной записи службы, который вы используете, недействителен. Чтобы получить действительный ключевой файл учетной записи службы, следуйте инструкциям в " Добавить Firebase" в приложение. Существует хороший пользовательский интерфейс, который вы можете использовать для создания нового файла JSON, который должен иметь все необходимые разрешения для вашего проекта. Вы можете использовать его для инициализации своего SDK следующим образом:

var serviceAccount = require("path/to/serviceAccountKey.json");

admin.initializeApp({
credential: admin.credential.cert(serviceAccount)
});

ответил(а) 2017-01-25T22:06:00+03:00 3 года, 10 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема