我正在尝试制定启用/禁用用户云功能。使用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;
});
答案 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'});
}