Невозможно развернуть правила Firebase через интерфейс командной строки Firebase

1

У меня есть файл правил Firebase в app/functions/index.js, и я пытаюсь развернуть правила базы данных с помощью этой базы данных Commandbase для развертывания --only, но когда я запускаю эту команду, она дает эту ошибку. Ошибка: Ошибка загрузки firebase.json:

Ошибка Parse: функции /index.js не поддерживают тип файла конфигурации

Это мой файл firebase.json, который создается, когда я запускал команду init firebase

{
  "database": {
    "rules": "functions/index.js"
  }
}

и это мой файл index.js

приложение /index.js

const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);
var count = 1;
exports.createNewUser = functions.auth.user().onCreate(event => {

    const user = event.data; // The Firebase user.

    const email = user.email || ''; // The email of the user.
    const displayName = user.displayName || '';
    const uid = user.uid || 'usersomething';
    const photo = user.photoUrl || '';

    console.log("the user" + uid);
    // The display name of the user.
    const userRef = admin.database().ref('/users');

    userRef.child('${uid}').update({
                  'email':email,
                  'photo':photo
                  });

    var date = new Date();
    var start_time = date.getTime();



});

exports.createEpisode = functions.database.ref('/users/{userId}/counsellor')
   .onWrite(event => {
     var uid = event.params.userId;
     const isACounsellor = event.data.val();
     if(isACounsellor == false){
     var episodeRef = admin.database().ref('/episodes');

     // create an episode for the user
     var newData = episodeRef.push();
     var date = new Date();
     var start_time = date.getTime();
     var episodeId = newData.key;
     newData.set(
                     {
                        'user':uid,
                         'goal':'',
                         'problem':'Anxiety',
                         'triggers':'',
                         'counsellor_uid':'',
                         'payment_id':'',
                         'pay':'',
                         'conversation_id':'',
                         'start_time':start_time,
                         'rating':'',
                         'review':'',
                         'paid':false,
                         'live_sessions':'1'
                     }
                         );
 var conversation = admin.database().ref('/conversation');

  // create a conversation

 var x = conversation.push();
 x.set(
     {
       'start_time':start_time,
       'end_time':''
     }
     );
 var y = x.child('messages').push().set({
   'message':"hey there!",
   'sender':'',
   'receive':uid,
   'timewrite':start_time
 });

  conversation.limitToLast(1).once('child_added',function(childSnapshot){
     var episodeReference = admin.database().ref('/episodes');
     var conversation_identifier = conversation.key | 'xyxy';

     episodeReference.child(episodeId).child('conversation_id').set(childSnapshot.key);
   });
 var userRef = admin.database().ref('/users');
   userRef.child(uid).child('episodes').child('0').set(episodeId);



 }
   });



exports.setTimeAndCounsellor = functions.database.ref('/episodes/{epId}/paid')
    .onWrite(event => {
      // Grab the current value of what was written to the Realtime Database.
      const original_value = event.data.val();
      if(original_value == true){
        var conversation = admin.database().ref('/conversation');
        var date = new Date();
        var start_time = date.getTime();
        var episodeReference = admin.database().ref('/episodes');
        var push_id = event.params.epId;
        episodeReference.child(push_id).once('value', function(snapshot){
            var type = snapshot.child('pay').val() | '';
            var conversation_id = snapshot.child('conversation_id').val();
            var d = new Date();
            if(type == 1){
              d.setMinutes(d.getMinutes() + 1);
            }
            if(type == 2){
              d.setMinutes(d.getMinutes() + 2);
            }
            if(type == 3){
              d.setMinutes(d.getMinutes() + 3);
            }

            conversation.child(conversation_id).child('end_time').set(d.getTime());

        });
        episodeReference.on('child_added',function(childSnapshot){
          var userEpisodeKey = childSnapshot.key;
          var anEpisode = childSnapshot.val();
          var userOfEpisode = anEpisode['user'];

            if(count % 2 != 0){
                var counsellor_id = 'sqHdZojaTUTe26YtHTjQl32PPsq1';
                episodes.child(userEpisodeKey).child('counsellor_uid').set(counsellor_id);
              }else {
                var counsellor_id = 'KyruKVVpNsVZl5jByhCYXyLtcwK2';
                episodes.child(userEpisodeKey).child('counsellor_uid').set(counsellor_id);
            }

        });
      }
});




exports.addToConversation = functions.database.ref('episodes/{epId}/counsellor_uid')
    .onWrite(event => {
      const convo = admin.database().ref('/conversation');
      const episodes = admin.database().ref('/episodes');
      const cid = event.data.val();
      const epId = event.params.epId;
      episodes.child(epId).child('conversation_id').once("value",function(dataSnapshot){
      const convoId =  dataSnapshot.val();
      if(convoId !== ''){
        convo.child(convoId).child('messages').limitToFirst(1).once("child_added",function(dataSnapshot){
          const messageId = dataSnapshot.key;
          convo.child(convoId).child('messages').child(messageId).child('sender').set(cid);

        });

      }
      });
    }
    );

 exports.notifyCounsellor  = functions.database.ref('/episodes/{episodeId}/counsellor_uid')
  .onWrite(event =>{
  const value = event.data.val();
  var user_col = admin.database().ref('/users');
  user_col.child(value).child('episodes').child('0').set(episodeId);
}
);
Теги:
firebase
firebase-realtime-database

2 ответа

0
Лучший ответ

Кажется, вы смешиваете два типа файлов, которые вы можете отправить серверам Firebase с помощью CLI:

  1. Правила безопасности базы данных Firebase определяют, как сам сервер базы данных гарантирует, что все операции чтения/записи действительны и авторизованы. Он настраивается через файл JSON, обычно называемый rules.json или database-rules.json. Формат этих правил безопасности описан здесь.

  2. Облачные функции для Firebase - это функции JavaScript, которые запускаются на серверах Google в ответ на события, которые происходят в вашем проекте Firebase. Код обычно находится в файле index.js. Функции описаны здесь.

Вы сообщаете CLI Firebase развернуть правила безопасности базы данных (вариант 1 выше), но передаете ему файл, который определяет облачные функции (вариант 2 выше). Поскольку functions/index.js не являются допустимым файлом JSON, инструмент не может его развернуть.

Первое, что нужно сделать, - это удалить это ошибочное определение rules из вашего firebase.json:

{
  "database": {
    "rules": "database-rules.js"
  }
}

Если вы пытаетесь развернуть только облачные функции вашего проекта, используйте функции firebase deploy --only functions.

Если вы пытаетесь развернуть свои правила безопасности базы данных, убедитесь, что у вас есть действующая database-rules.json и запустите firebase deploy --only database.

1

Обратитесь к разделу " Развертывание " документации CLI Firebase, а также к Firebase Web Codelab для примера того, как форматируются правила. Файл firebase.json указывает:

{
  "database": {
    "rules": "database-rules.json"
  },
  ...
}

В этом же каталоге есть файл database-rules.json, который содержит конфигурацию правил, которая загружается.

Я не уверен на 100%, но, скорее всего, файл конфигурации правил должен быть в формате JSON на основе полученного вами сообщения об ошибке: Parse Error: functions/index.js is not of a supported config file type.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню