Как обрабатывать ошибки на стороне клиента (Android) из облачных функций (functions.https.HttpsError) с использованием Typescript - PullRequest
0 голосов
/ 04 февраля 2019

Сначала я использую Typescript для написания облачных функций для создания учетной записи с аутентификацией Firebase.После создания новой учетной записи попытался добавить настраиваемые утверждения в учетную запись и добавить информацию о пользователе в базу данных Firebase в реальном времени. Эти шаги выполнены успешно.

Проблема возникает при добавлении уже существующей учетной записи.Ошибка выводится в журнале функций, но я не могу выбросить ее на Android

Мой журнал функций облачной базы firebase

код облачных функций:.

import * as functions from 'firebase-functions';
import * as admin from 'firebase-admin';
import { User } from './model/User';

admin.initializeApp();

const db = admin.database();

exports.createSellerAccount = functions.https.onCall((data, context) => {
  const userEmail = data.email;
  const userPassword = data.password;
  const user: User = new User();
  const newUserData = JSON.parse(data.newUser);

  user.setFirstName(newUserData.firstName);
  user.setLastName(newUserData.lastName);
  user.setMobileNumber(newUserData.mobileNumber);

  admin.auth().createUser({
    email: userEmail,
    password: userPassword
  }).then(function (userRecord) {
    // See the UserRecord reference doc for the contents of userRecord.
    const additionalClaims = {
      sellerAccount: true
    };

    admin.auth().setCustomUserClaims(userRecord.uid, additionalClaims)
      .then(function (customToken) {
        // Send token back to client
        console.log("Successfully token created new user:", userRecord.uid);
      })
      .catch((error) => {
        console.log("Error creating custom token:", error);
      });

    db.ref("Users/" + userRecord.uid).set(user)
      .then(() => {
        console.log("seller info inserted successfully");
      })
      .catch(function (error) {
        console.log("Error while inserting seller info:", error);
      });

  }).catch(function(error) {
    // console.log("Error creating new user:", error);
    throw new functions.https.HttpsError('already-exists',error);
  });

})

Код Android:.

private void createAccount() {
    ekhtarSeller.showProgressDialog(this);
    newUser.setFirstName(tietFirstName.getText().toString().trim());
    newUser.setLastName(tietLastName.getText().toString().trim());
    newUser.setMobileNumber(tietMobileNumber.getText().toString().trim());

    HashMap<String, Object> data = new HashMap<String, Object>();
    data.put("email", tietEmail.getText().toString().trim());
    data.put("password", tietPassword.getText().toString().trim());
    data.put("newUser", new Gson().toJson(newUser));

    mFunctions
            .getHttpsCallable("createSellerAccount")
            .call(data)
            .continueWith(new Continuation<HttpsCallableResult, String>() {
                @Override
                public String then(@NonNull Task<HttpsCallableResult> task) throws Exception {
                    // This continuation runs on either success or failure, but if the task
                    // has failed then getResult() will throw an Exception which will be
                    // propagated down.
                    ekhtarSeller.getProgressDialog().cancel();
                    String result = (String) task.getResult().getData();
                    Toast.makeText(CreateAccountActivity.this, result, Toast.LENGTH_SHORT).show();
                    return result;
                }
            });
}

1 Ответ

0 голосов
/ 04 февраля 2019

Случилось так, что вы не используете значения, указанные в связанном документе в firebase для параметра кода. Вы получаете коды ошибок для API Google "failed-auth" или "invalid-email"

. Пожалуйста, посетите functions.https.HttpsError

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...