5

ユーザの作成時にリアルタイムデータベースのユーザデータを更新しようとしています。これは私のコードです:Social ProviderのFirebase Authイベントのクラウド機能

const functions = require('firebase-functions'); 
const promise = require('request-promise'); 
const admin = require('firebase-admin'); 
admin.initializeApp(functions.config().firebase); 

var omitBy = require('lodash.omitby'); 
var isNil = require('lodash.isnil'); 

'use strict'; 

exports.userCreated = functions.auth.user().onCreate(event => { 

    let request = admin.auth().getUser(event.data.uid) 
    .then(function(user) { 
    console.log("Successfully fetched user data: ", user.toJSON()); 

    var email, firstName, lastName, photoURL; 

    for (var provider of user.providerData) { 

     if (provider.email) { 
     email = provider.email; 
     } 

     if (provider.photoURL) { 
     photoURL = provider.photoURL; 
     } 

     if (provider.displayName) { 
     const names = provider.displayName.split(' '); 
     firstName = names[0]; 

     if (names.length > 1) { 
      lastName = names[names.length - 1]; 
     } 
     } 
    } 

    var values = omitBy({ 
     email: email, 
     first_name: firstName, 
     last_name: lastName, 
     license_agreement_version: '1.1', 
     image_url: photoURL 
    }, isNil); 

    admin.database().ref('users/' + user.uid).set(values); 
    }) 
    .catch(function(error) { 
    console.error("Error Fetching User: ", error); 
    }); 

    return request; 
}); 

ただし、経由でユーザーが作成されました。 Facebookのプロバイダデータは提供されていません。これはコンソールログです:

Successfully fetched user data: { uid: 'exampleUID', 
    email: undefined, 
    emailVerified: false, 
    displayName: undefined, 
    photoURL: undefined, 
    disabled: false, 
    metadata: 
    { lastSignedInAt: 2017-03-16T19:40:59.000Z, 
    createdAt: 2017-03-16T19:40:59.000Z }, 
    providerData: [] } 

私は何か間違ったことをしていますか、このデータは作成時に提供されませんか?

+0

あなたは今までに理由を説明し、見つけましたユーザーはFacebookとGoogleで不完全ですか? –

答えて

1

admin.auth().getUser(...)にもう一度お電話する必要はありません。便利なことに、この機能で受け取ったevent.dataはすでにUserRecordです!ここで

は、認証イベントを印刷するための私の非常に単純なコードです:

var functions = require('firebase-functions'); 

exports.helloAuth = functions.auth.user().onCreate(event => { 
    console.log("User created: " + JSON.stringify(event)); 
}); 

そしてここでは、Facebook経由Iのログイン時にそれが出力するものです:

{ 
    "displayName": "Robert-Jan Huijsman", 
    "email": "[email protected]", 
    "metadata": { 
    "createdAt": "2017-03-17T01:34:03.000Z", 
    "lastSignedInAt": "2017-03-17T01:34:03.000Z" 
    }, 
    "photoURL": "https://scontent.xx.fbcdn.net/v/t1.0-1/p100x100/REDACTED", 
    "providerData": [ 
    { 
     "displayName": "Robert-Jan Huijsman", 
     "email": "[email protected]", 
     "photoURL": "https://scontent.xx.fbcdn.net/v/t1.0-1/p100x100/REDACTED", 
     "providerId": "facebook.com", 
     "uid": "http://facebook.com/1234567890" 
    } 
    ], 
    "uid": "AaBbCcDdEeFf" 
} 
関連する問題