2017-08-10 54 views
8

Spędziłem trochę czasu, szukając rozwiązania problemu, który wydaje się być prosty, ale ... Jak mogę uzyskać aktualne informacje o użytkownikach w funkcji chmury (jeśli nie używasz wyzwalacza functions.auth)? Jestem pewien, że musi to być proste rozwiązanie. (Mam nadzieję)Funkcje chmurowe dla Firebase - Uzyskaj bieżący identyfikator użytkownika

Dzięki za odpowiedzi ... Po prostu to zrobiłem, ale jak uzyskać/user/uid z bazy danych Firebase DB w zdarzeniu wyzwalanym przez pamięć masową? na przykład

exports.addUploadInfoToDatabase = functions.storage.object().onChange(event => { 
    console.log("firebase storage has been changed"); 
    // need to find the uid in here somehow 
    admin.database().ref(`/user/uid`).push({testKey:"testData"}); 
}) 

Stosuje się, jeśli brakowało mi punktu w twoich odpowiedziach.

Dzięki ...

+0

Witam, witam w SO! Pokaż, co już wypróbowałeś. Twoje pytanie, tak jak jest obecnie, prawdopodobnie nie dostanie dobrej odpowiedzi i może zostać zamknięte. Proszę [wziąć wycieczkę] (https://stackoverflow.com/tour) i przeczytać [jak zapytać] (https://stackoverflow.com/help/how-to-ask) i [jak stworzyć minimalny, weryfikowalny przykład] (https://stackoverflow.com/help/mcve) w celu uzyskania lepszych wyników przy użyciu tej witryny. – vatavale

+0

Nie jest jasne, w jaki sposób odpowiedź na pytanie oznaczone jako duplikat odnosi się do pytania OP. –

Odpowiedz

3

pierwsze można uzyskać prąd zalogowanych tokenId użytkownika poprzez wywołanie getIdToken() na Użytkownika: https://firebase.google.com/docs/reference/js/firebase.User#getIdToken

firebase.auth().currentUser.getIdToken(true) 
.then(function (token) { 
    // You got the user token 
}) 
.catch(function (err) { 
    console.error(err); 
}); 

następnie wysłać go do funkcji cloud.

Następnie w funkcji cloud można użyć: https://firebase.google.com/docs/auth/admin/verify-id-tokens

Przykład:

admin.auth().verifyIdToken(idToken) 
    .then(function(decodedToken) { 
    var uid = decodedToken.uid; 
    // ... 
    }).catch(function(error) { 
    // Handle error 
    }); 

Dokumentacja decodedToken jest tutaj: https://firebase.google.com/docs/reference/admin/node/admin.auth.DecodedIdToken#uid

DecodedIdToken zawiera UID użytkownika, a następnie można uzyskać użytkownik nazywając to: https://firebase.google.com/docs/reference/admin/node/admin.auth.Auth#getUser

Który zwraca UserRecord https://firebase.google.com/docs/reference/admin/node/admin.auth.UserRecord

+0

Dzięki za odpowiedź ... "Najpierw możesz wysłać aktualnie zalogowanego użytkownika tokenId od klienta do swojej funkcji Cloud" ... Czy masz na myśli przekazanie wartości do funkcji chmurowej? Nie mogę znaleźć żadnej dokumentacji, aby to osiągnąć ... –

+0

Dodano przykład JavaScript, aby pobrać token użytkownika w kliencie. – Kim

+0

Jak uzyskać dostęp do 'firebase.auth(). CurrentUser'? Mam 'firezase nie jest zdefiniowana'. Jeśli masz już 'currentUser', dlaczego nie otrzymasz bezpośrednio' .uid? – Francescu