Как проверить функцию onCall как аутентифицированного пользователя в функциях: shell - PullRequest
0 голосов
/ 11 сентября 2018

Я хочу проверить функцию onCall через firebase functions:shell как аутентифицированный usr

Я пробовал многие комбинации звонков с https://firebase.google.com/docs/functions/local-emulator#invoke_https_functions А также загрузка и настройка GOOGLE_APPLICATION_CREDENTIALS env var

Моя функция выглядит так:

exports.sendMessage = functions.https.onCall((data, context) => { 
    if (!context.auth) {
        throw new functions.https.HttpsError('failed-precondition', 'The function must be called while authenticated.');
    }
    // Other logic

}

Он отлично работает после развертывания и запуска из моего приложения ios, но я не могу запустить его в оболочке.

Следующая команда действительно ударит по функции:

sendMessage.post({headers: {'content-type' : 'application/json'},body: JSON.stringify({data: {'messageId':'test'} }) })

и возвращает

RESPONSE RECEIVED FROM FUNCTION: 400, {“error”:{“status”:“FAILED_PRECONDITION”,“message”:“The function must be called while authenticated.“}}

Что правильно, но я хочу аутентифицированного пользователя сейчас. Когда я пытаюсь добавить аутентификацию, как в документации, рекомендую:

sendMessage('data', {auth:{uid:'USERUID'}}).post({headers: {'content-type' : 'application/json'},body: JSON.stringify({data: {'messageId':'test'} }) })

Я получаю ERROR SENDING REQUEST: Error: no auth mechanism defined

Если я попытаюсь следовать заголовкам авторизации на этой странице https://firebase.google.com/docs/functions/callable-reference примерно так:

sendMessage.post({headers: {'Authorization': 'Bearer USERUID', 'content-type' : 'application/json'},body: JSON.stringify({data: {'messageId':'test'} }) })

Я вернусь:

ОТВЕТ, ПОЛУЧЕННЫЙ ОТ ФУНКЦИИ: 401, {"error": {"status": "UNAUTHENTICATED", "message": "Unauthenticated"}}

Как отправить запрос как аутентифицированный пользователь?

Ссылки по теме Как локально протестировать облачные функции firebase `functions.https.onCall`?

1 Ответ

0 голосов
/ 11 сентября 2018

Согласно документации, для заголовка авторизации требуется идентификатор аутентификации токен , а не идентификатор пользователя. Вам нужно как-то сгенерировать токен и передать его функции. Вызываемая функция затем проверит этот токен и предоставит идентификатор пользователя для функции через context.auth.

Похоже, вы можете использовать Firebase Auth REST API для получения одного из этих токенов. Или вы можете создать его в клиентском приложении, которое использует клиентские библиотеки Firebase Auth, зарегистрировать его и скопировать его значение и использовать его до истечения срока его действия (1 час).

...