Firebase - Как отключить пользователя с помощью облачной функции? - PullRequest
0 голосов
/ 01 ноября 2018

Я пытаюсь выработать функцию включения / выключения пользовательского облака. При использовании admin SDK для отключения пользователя я получаю ответ: , что свойство disabled только для чтения . Кто-нибудь может мне помочь? Данные, которые передаются в функцию, это идентификатор пользователя.

 export const disableUser = functions.https.onCall((data, context) => {
    console.log(data);

    admin.auth().updateUser(data, {
        disabled: true
    }).then(() => {
        admin.firestore().collection('users').doc(data).update({ disabled: true})
            .then(() =>  {
                console.log(`Successfully disabled user: ${data}`);

                return 200;
            })
            .catch((error => console.log(error)));        
    }).catch( error => console.log(error));

    return 500;
});

Ответы [ 2 ]

0 голосов
/ 22 мая 2019

Я использовал typeScript для облачных функций.

index.ts

import * as functions from 'firebase-functions';

export const disableUser = functions.https.onCall((data, context) => {
  const userId = data.userId;
  return functions.app.admin.auth().updateUser(userId, {disabled: true});
});

В моем приложении я вызывал функцию disableUser следующим образом:

import {AngularFireFunctions} from '@angular/fire/functions';

export class AppComponent {

data$: Observable<any>;
callable: (data: any) => Observable<any>;

constructor(private fns: AngularFireFunctions) {
  this.callable = fns.httpsCallable('disableUser');
  this.data$ = this.callable({userId: 'ZDxaTS0SoYNYqUVJuLLiXSLkd8A2'});
}
0 голосов
/ 01 ноября 2018

Похоже, вы пытаетесь вернуть код состояния HTTP из вашей функции. Это не работает таким образом. Прочтите документацию по вызываемым функциям , чтобы понять, что возвращать.

Поскольку вы выполняете асинхронную работу в своей функции (updateUser(), затем update()), вам необходимо вернуть обещание, которое разрешается с данными для отправки клиенту. Прямо сейчас вы просто возвращаете 500 до завершения асинхронной работы. По крайней мере, вам нужно вернуть обещание от update(), чтобы облачные функции знали, когда ваша асинхронная работа выполнена.

return admin.auth().updateUser(...)
.then(() => {
    return admin.firestore().collection('users').doc(data).update(...)
})

Крайне важно понимать, как работают обещания при работе с облачными функциями для Firebase. Вы не можете просто вернуть все, что хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...