Aar*_*ron 0 javascript firebase firebase-authentication google-cloud-functions google-cloud-firestore
我正在尝试创建一个函数,当设备在应用程序中注册时,会将这个设备 uid 附加到注册该设备的登录用户的 uid(这是在另一个 firestore 集合中,当用户寄存器)。
这是我的代码:
exports.addDeviceToUser = functions.firestore.document('device-names/{device}').onUpdate((change, context) => {
const currentUser = admin.auth().currentUser;
const deviceName = context.params.device;
var usersRef = db.collection('users');
var queryRef = usersRef.where('uid', '==', currentUser.uid);
if (authVar.exists) {
return queryRef.update({sensors: deviceName}).then((writeResult => {
return console.log('Device attached');
}));
} else {return console.log('Device attachment failed, user not signed in');}
});Run Code Online (Sandbox Code Playgroud)
我一直收到此错误:“类型错误:无法读取未定义的属性 'uid'。” 显然我无法访问当前用户的身份验证信息。为什么?
Admin SDK 没有当前用户的感觉。当您说 时admin.auth(),您将返回一个Auth对象。正如您从 API 文档中看到的,上面没有 currentUser 属性。只有 Firebase 客户端 SDK 可以感知当前用户,因为您使用它来让用户登录。
如果您需要客户端应用程序告诉 Cloud Functions 代码使用用户的身份,则必须从客户端向其发送 ID 令牌,并在服务器上对其进行验证。然后服务器可以知道最终用户是谁,并代表他们执行操作。通常,您使用 HTTP 类型触发器执行此操作。 可调用函数在客户端和服务器之间自动传输此数据,但您可以使用类似于此示例的代码自行手动完成。
目前,Firestore 触发器无法立即访问对数据库进行更改的最终用户。但是,如果您使用用户的 Auth UID 作为文档的密钥,并使用安全规则保护该文档,您至少可以根据他们对文档所做的更改来推断用户的 UID,方法是将其拉出更改的文档的 ID。
| 归档时间: |
|
| 查看次数: |
2100 次 |
| 最近记录: |