"context.auth.uid" TypeError: Невозможно прочитать свойство 'uid' из неопределенного - PullRequest
0 голосов
/ 08 декабря 2018

Я просто пытаюсь получить " uid " моих аутентифицированных пользователей, используя функции firebase.Но каждый раз, когда я запускаю функцию в « firebase functions: shell ».Я получаю эти ошибки.Может ли кто-нибудь помочь мне решить эту проблему?

"context.auth.uid" Ошибка типа: невозможно прочитать свойство 'uid' из неопределенного

enter image description here

exports.sendNewUser = functions.database.ref('/Users/')
.onCreate(async (snapshot, context) => {

    const userId = await context.auth.uid;

    const tokenPath = await admin.database().ref('Notify').once('value')

    var message = []

    tokenPath.forEach((childSnapshot) => {
        var allTokens = childSnapshot.val().expo

        if (allTokens) {
            message.push({
                "to": allTokens,
                "header": " Users",
                "body": "New user has been added, check them out!!!"
            })
        }
    })

    await fetch('https://exp.host/--/api/v2/push/send', {
        method: "POST",
        headers: {
            "Accept": "application/json",
            "Content-Type": "application/json"
        },
        body: JSON.stringify(message)
    })

    console.log("The user ID is : " + userId)

})

Package.json:

{
  "name": "functions",
  "description": "Cloud Functions for Firebase",
  "scripts": {
    "lint": "eslint .",
    "serve": "firebase serve --only functions",
    "shell": "firebase functions:shell",
    "start": "npm run shell",
    "deploy": "firebase deploy --only functions",
    "logs": "firebase functions:log"
  },
  "dependencies": {
    "dateformat": "^3.0.3",
    "firebase-admin": "6.3.0",
    "firebase-functions": "^2.1.0",
    "node-fetch": "^2.3.0"
  },
  "devDependencies": {
    "eslint": "^4.12.0",
    "eslint-plugin-promise": "^3.6.0"
  },
  "private": true
}

1 Ответ

0 голосов
/ 08 декабря 2018

Документация для запуска триггеров базы данных реального времени ясна:

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

# to mock unauthenticated user
myDatabaseFunction('data', {authMode: 'USER'})
# to mock end user
myDatabaseFunction('data', {auth: {uid: 'abcd'}})

Вам необходимо передать последний объект, который имитирует полезную нагрузку auth в контексте.Без этого auth не будет содержать ничего.

Он будет работать нормально, когда вы опубликуете его.

Вам не нужно использовать await при доступе к uid.Это не асинхронная функция.

...