使用 firebase admin sdk 创建可以使用电子邮件和密码登录的用户

Yas*_*air 7 javascript firebase firebase-authentication firebase-admin

我在云函数上使用 firebase admin SDK 来创建用户

  admin.auth().createUser({
email: someEmail,
password: somePassword,
})
Run Code Online (Sandbox Code Playgroud)

现在我希望用户使用登录signInWithEmailAndPassword('someEmail', 'somePassword')但我不能。我收到以下错误

{code: "auth/user-not-found", message: "There is no user record corresponding to this identifier. The user may have been deleted."}
Run Code Online (Sandbox Code Playgroud)

小智 8

似乎没有理由进行字符串化/解析。在我与一个不相关的拼写错误作斗争之后,这起作用了......

来自 REACT JS 按钮单击的函数调用

     <Button onClick={() => {
                    var data = {
                        "email": "name@example.com",
                        "emailVerified": true,
                        "phoneNumber": "+15551212",
                        "password": "randomPW",
                        "displayName": "User Name",
                        "disabled": false,
                        "sponsor": "Extra Payload #1 (optional)",
                        "study": "Extra Payload #2 (optional)"
                    };
                    var createUser = firebase.functions().httpsCallable('createUser');
                    createUser( data ).then(function (result) {
                        // Read result of the Cloud Function.
                        console.log(result.data)
                    });
                }}>Create User</Button>
Run Code Online (Sandbox Code Playgroud)

在 /functions 子目录中的 index.js 中:

const functions = require("firebase-functions");
const admin = require('firebase-admin');
admin.initializeApp();

// CREATE NEW USER IN FIREBASE BY FUNCTION
exports.createUser = functions.https.onCall(async (data, context) => {
  try {
    const user = await admin.auth().createUser({
      email: data.email,
      emailVerified: true,
      password: data.password,
      displayName: data.displayName,
      disabled: false,
    });
    return {
      response: user
    };
} catch (error) {
    throw new functions.https.HttpsError('failed to create a user');
  }
});
Run Code Online (Sandbox Code Playgroud)

控制台输出的屏幕截图


小智 -1

以防万一其他人遇到这个问题,我可以在这个的帮助下修复它。

这是onCreate云函数内部的一个工作示例:

exports.newProjectLead = functions.firestore
  .document('newProjectForms/{docId}')
  .onCreate(async (snapshot) => {
    const docId = snapshot.id
    // this is what fixed it the issue
    // stringify the data
    const data = JSON.stringify(snapshot.data())
    // then parse it back to JSON
    const obj = JSON.parse(data)
    console.log(obj)
    const email = obj.contactEmail
    console.log(email)
    const password = 'ChangeMe123'
    const response = await admin.auth().createUser({
      email,
      password
    })
    data
    const uid = response.uid

    const dbRef = admin.firestore().collection(`clients`)
    await dbRef.doc(docId).set({
      id: docId,
      ...data,
      uid
    }, {
      merge: true
    })

    console.log('New Client Created')

  })
Run Code Online (Sandbox Code Playgroud)