Приложение Firebase не имеет доступа к функциям (например, firebase.auth ()) - PullRequest
0 голосов
/ 08 июня 2018

У меня проблема, которую я часами изучал, но, похоже, не могу понять.Я пытаюсь использовать Firebase с Node.js, но не могу получить доступ к различным функциям Firebase (например, firebase.auth () и firebase.firestore ()).Тем не менее, когда я инициализирую через Admin SDK, те в конечном итоге работают.Ниже приведен мой простой код, а также ошибка:

const functions = require('firebase-functions');
const firebase = require('firebase');

const app = express();
firebase.initializeApp(functions.config().firebase);

const auth = firebase.auth();
const db = firebase.firestore();

И полученная ошибка: TypeError: firebase.auth не является функцией

Примечание. У меня также было несколько строк, инициализирующих express ирули, но сомневаюсь, что они могли бы оказать какое-либо влияние.

Я также пытался включить "require (" firebase / auth ")", но это не сработало.Ниже также мой package.json, а именно модули, которые я установил:

"dependencies": {
    "consolidate": "^0.15.1",
    "express": "^4.16.3",
    "firebase": "^5.0.4",
    "firebase-admin": "~5.12.1",
    "firebase-functions": "^1.0.4",
    "firebase-tools": "^3.18.6",
    "firebaseauth": "^1.0.0",
    "handlebars": "^4.0.11"
  },

Любая помощь, пожалуйста?Я немного начинающий веб-разработчик, поэтому любой совет будет высоко ценится.Спасибо!

Ответы [ 2 ]

0 голосов
/ 08 июня 2018

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

Более длинный ответ: Чтобы помочь вам, вот пример работающего index.js файл для облачной функции Firebase, который обращается как к базе данных ( не firestore ), так и к части авторизации Firebase ... с некоторыми комментариями для обеспечения контекста.Это конечная точка API, которая принимает токен пользователя, проверяет, что пользователь является «администратором» в моей системе, а затем создает новую учетную запись пользователя, прежде чем ответить новым UID.

const functions = require('firebase-functions');
const admin = require('firebase-admin');

admin.initializeApp(functions.config().firebase);


exports.createUser = functions.https.onRequest( (req, res) => {

  // Look at the accessToken provided in the request, and have Firebase verify whether it's valid or not
  admin.auth().verifyIdToken(req.body.accessToken).then(decodedIdToken => {
    // Token was valid, pull the UID out of the token for the user making this request
    let requestorUid = decodedIdToken.uid;

    // Make a query to the database to see what that user's role is
    admin.database().ref(`userBasicInfo/${requestorUid}/role`).once('value').then( dataSnapshot => {
      if (dataSnapshot.val() === 'admin') {
        // If their role is "admin" then let's create a user!
        let userEmail = `${req.body.newuserid}@company.org`;
        admin.auth().createUser({
          email: userEmail,
          password: req.body.password
        }).then(userRecord => {
          // See the UserRecord reference doc for the contents of userRecord.
          res.send({uid: userRecord.uid});
        }).catch( error => {
          console.log("Error creating user:");
          console.log(error)
          res.send(false);
        });
      } else {
        console.log('Checked the database for the UID provided in the access token, role was not "admin".');
        res.send(false);
      }
    }).catch( err => {
      console.log('Error finding user in database:');
      console.log(err);
      res.send(false);
    })

  }).catch( error => {
    console.error('Error while verifying Firebase ID token:');
    console.log(error);
    res.send(false);
  });

});

И package.json будет:

{
  "name": "functions",
  "description": "Cloud Functions for Firebase",
  "scripts": {
    "serve": "firebase serve --only functions",
    "shell": "firebase experimental:functions:shell",
    "start": "npm run shell",
    "deploy": "firebase deploy --only functions",
    "logs": "firebase functions:log"
  },
  "dependencies": {
    "firebase-admin": "^5.11.0",
    "firebase-functions": "^1.0.2"
  },
  "private": true
}
0 голосов
/ 08 июня 2018

Облачные функции * Триггеры 1002 * имеют следующий формат:

exports.myFunctionName = functions.firestore
    .document('users/marie').onWrite((change, context) => {
      // ... Your code here
    });

Невозможно получить доступ к клиентским SDK изнутри облачной функции.Вместо этого, если есть функции, к которым вы хотите получить доступ в облачной функции, вы можете использовать Admin SDK .

var admin = require('firebase-admin');
var app = admin.initializeApp();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...