【问题标题】:Cloud Functions for Firebase Auth Events for Social ProviderCloud Functions for Firebase Auth Events for Social Provider
【发布时间】:2017-08-08 05:00:25
【问题描述】:

在创建用户时尝试更新实时数据库中的用户数据。这是我的代码:

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: [] }

是我做错了什么,还是在创建时不会提供这些数据?

【问题讨论】:

  • 你有没有找到解释,为什么 Facebook 和 Google 的用户不完整?

标签: javascript facebook firebase firebase-authentication google-cloud-functions


【解决方案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 登录时的输出:

{
  "displayName": "Robert-Jan Huijsman",
  "email": "REDACTED@gmail.com",
  "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": "REDACTED@gmail.com",
      "photoURL": "https://scontent.xx.fbcdn.net/v/t1.0-1/p100x100/REDACTED",
      "providerId": "facebook.com",
      "uid": "http://facebook.com/1234567890"
    }
  ],
  "uid": "AaBbCcDdEeFf"
}

【讨论】:

    猜你喜欢
    • 2017-09-07
    • 2018-01-03
    • 2022-12-01
    • 2018-04-19
    • 2017-08-26
    • 2017-08-07
    • 1970-01-01
    • 2017-10-09
    • 1970-01-01
    相关资源
    最近更新 更多