Firebase Admin SDK NodeJS - «Нет записи пользователя, соответствующей предоставленному идентификатору». ошибка - PullRequest
0 голосов
/ 08 января 2020

Следуя документации Firebase SDK на https://firebase.google.com/docs/auth/admin/email-action-links#generate_email_verification_link и получая следующую ошибку, которая не имеет большого смысла, так как функция вызывается из серверной среды с использованием аутентифицированного admin.auth ().

Может кто-нибудь знает, что является причиной проблемы?

Error from admin.auth().generateEmailVerificationLink : { Error: There is no user record corresponding to the provided identifier.
    at FirebaseAuthError.FirebaseError [as constructor] (/srv/node_modules/firebase-admin/lib/utils/error.js:42:28)
    at FirebaseAuthError.PrefixedFirebaseError [as constructor] (/srv/node_modules/firebase-admin/lib/utils/error.js:88:28)
    at new FirebaseAuthError (/srv/node_modules/firebase-admin/lib/utils/error.js:147:16)
    at Function.FirebaseAuthError.fromServerError (/srv/node_modules/firebase-admin/lib/utils/error.js:186:16)
    at /srv/node_modules/firebase-admin/lib/auth/auth-api-request.js:1201:49
    at <anonymous>
    at process._tickDomainCallback (internal/process/next_tick.js:229:7)
  errorInfo: 
   { code: 'auth/user-not-found',
     message: 'There is no user record corresponding to the provided identifier.' },
  codePrefix: 'auth' }

Код просто так:

exports = module.exports = functions.firestore
  .document("xxx/{docId}")
  .onCreate(async (snap, context) => {
    let yyy = snap.data();
    let { uid, userData } = yyy;
    console.log("from sendEmailVerification, uid, userdata: ", userData);
    const actionCodeSettings = {
      url: `${emailConfirmationUrl}`,
      handleCodeInApp: false
    };
    return admin.auth().generateEmailVerificationLink(userData.email, actionCodeSettings)
      .then(async (link) => {
        console.log("uid from generateEmailVerificationLink and email: ", uid, userData.email)
        await admin.firestore().collection('users').doc(uid).set({
          verificationLink: link,
          emailVerified: false
        }, { merge: true });
        return emailfunc.sendCustomVerificationEmail(userData.email, link);
      })
      .catch((err) => {
        console.error("Error from admin.auth().generateEmailVerificationLink :", err);
        return Promise.reject(err);
      });
  });

1 Ответ

0 голосов
/ 08 января 2020

Вы читаете адрес электронной почты пользователя из базы данных (Firestore). Эта учетная запись пользователя, однако, не существует в Firebase Auth. Он также должен существовать в Firebase Auth, если вы хотите использовать sh API, такие как getUser() и generateEmailVerificationLink(). Недостаточно иметь его только в Firestore.

...