Firebase-如何使用Cloud Function禁用用户?

时间:2018-11-01 16:33:42

标签: firebase google-cloud-functions

我正在尝试制定启用/禁用用户云功能。使用admin SDK禁用用户时,我得到响应: disabled属性为只读。有人可以帮我吗?传递给函数的数据是用户ID。

 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 :(得分:1)

您似乎正在尝试从函数中返回HTTP状态代码。那样行不通。请read the documentation for callable functions了解返回的内容。

由于您正在函数中执行异步工作(updateUser(),然后是update()),因此您需要返回一个承诺,该承诺将与数据一起解析以发送给客户端。目前,您只是在异步工作完成之前返回500。至少,您需要从update()返回承诺,以便Cloud Functions知道何时完成异步工作。

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

了解当处理Firebase的Cloud Functions时诺言如何工作至关重要。您不能随便退回任何东西。

答案 1 :(得分:0)

我将typeScript用于Cloud Functions。

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'});
}