Dans l'exemple ci-dessous, existe-t-il un moyen d'obtenir l'uid de l'utilisateur qui a écrit dans/messages/{pushId}/original?
exports.makeUppercase = functions.database.ref('/messages/{pushId}/original')
.onWrite(event => {
// Grab the current value of what was written to the Realtime Database.
const original = event.data.val();
console.log('Uppercasing', event.params.pushId, original);
const uppercase = original.toUpperCase();
// You must return a Promise when performing asynchronous tasks inside a Functions such as
// writing to the Firebase Realtime Database.
// Setting an "uppercase" sibling in the Realtime Database returns a Promise.
return event.data.ref.parent.child('uppercase').set(uppercase);
});
Depuis que les fonctions Firebase ont atteint la version 1.0, ce comportement n'est plus documenté mais a légèrement changé. Assurez-vous de lire les documents .
Le contexte a été ajouté aux fonctions cloud et vous pouvez l'utiliser comme ceci
exports.dbWrite = functions.database.ref('/path/with/{id}').onWrite((data, context) => {
const authVar = context.auth; // Auth information for the user.
const authType = context.authType; // Permissions level for the user.
const pathId = context.params.id; // The ID in the Path.
const eventId = context.eventId; // A unique event ID.
const timestamp = context.timestamp; // The timestamp at which the event happened.
const eventType = context.eventType; // The type of the event that triggered this function.
const resource = context.resource; // The resource which triggered the event.
// ...
});
RÉPONSE MISE À JOUR (v1.0.0 +) :
Comme indiqué dans @ réponse de Bery ci-dessus , version 1.0.0
du SDK Firebase Functions a introduit un nouveau context.auth
objet qui contient l'état d'authentification tel que uid
. Voir "Nouvelles propriétés pour les informations d'authentification des utilisateurs" pour plus de détails.
RÉPONSE ORIGINALE (avant v1.0.0):
Oui, cela est techniquement possible, bien qu'il ne soit pas actuellement documenté. Le uid
est stocké avec le event.auth
objet. Lorsqu'une fonction de cloud de base de données est déclenchée à partir d'une situation d'administration (par exemple, à partir de la visionneuse de données de la console Firebase ou d'un SDK d'administration), la valeur de event.auth
est:
{
"admin": true
}
Lorsqu'une fonction de cloud de base de données est déclenchée à partir d'une référence non authentifiée, la valeur de event.data
est:
{
"admin": false
}
Et enfin, lorsqu'une fonction de cloud de base de données est déclenchée à partir d'une référence authentifiée, mais pas admin, le format de event.auth
est:
{
"admin": false,
"variable": {
"provider": "<PROVIDER>",
"provider_id": "<PROVIDER>",
"user_id": "<UID>",
"token": {
// Decoded auth token claims such as sub, aud, iat, exp, etc.
},
"uid": "<UID>"
}
}
Compte tenu des informations ci-dessus, votre meilleur pari pour obtenir le uid
de l'utilisateur qui a déclenché l'événement est de procéder comme suit:
exports.someFunction = functions.database.ref('/some/path')
.onWrite(event => {
var isAdmin = event.auth.admin;
var uid = event.auth.variable ? event.auth.variable.uid : null;
// ...
});
Notez simplement que dans le code ci-dessus, uid
serait null
même si isAdmin
est true
. Votre code exact dépend de votre cas d'utilisation.
AVERTISSEMENT: Il s'agit actuellement d'un comportement non documenté. même dans les versions non majeures. "