我正在尝试实现启用/禁用用户云功能。当使用admin SDK禁用用户时,我得到的响应是:禁用的属性为只读。有人能帮我吗?传递给函数的数据是用户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;
});
我为云函数使用了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'});
}
看起来您正试图从函数返回HTTP状态代码。这样不行。请阅读可调用函数的文档,以了解返回的内容。
由于您在函数中执行异步工作(先是updateUser()
,然后是update()
(,因此需要返回一个promise,该promise使用要发送给客户端的数据进行解析。现在,您只是在异步工作完成之前返回500
。至少,您需要从update()
返回promise,以便Cloud Functions知道异步工作何时完成。
return admin.auth().updateUser(...)
.then(() => {
return admin.firestore().collection('users').doc(data).update(...)
})
在处理Firebase的云功能时,了解promise是如何工作的至关重要。你不能只归还你想要的任何东西。