Не удается обновить электронную почту из Firebase (авторизация) - PullRequest
0 голосов
/ 10 марта 2020

У меня есть авторизация Firebase, вы можете войти и выйти. Но я хочу, чтобы currentUser мог изменить электронную почту.

У меня есть функция сброса пароля, которая отправляет электронное письмо со ссылкой, и вы можете сбросить пароль, но он не работал с изменение адреса электронной почты.

Это страница профиля

Вот код

<template>
    <div class="container">
        <div class="card">
            <div class="card-header">
                <h1>Profile</h1>
            </div>
            <div v-if="!isHidden" class="alert alert-success" role="alert">
              <strong>Email sended</strong>
            </div>
            <div class="card-body">
                <form action="#" @submit.prevent="submit" @click="isHidden = !isHidden">
                    <div class="form-group row mb-0">
                        <div class="col-md-7 offset-sm-6 offset-md-7 offset-xl-9">
                            <input type="submit" class="btn btn-primary" @click="resetPassword" value="Reset your password">
                        </div>
                    </div>
                </form>

                <div class="">
                  <input type="email" class="form-control" v-model="email">  
                  <input type="submit" class="btn btn-primary" @click="resetEmail" value="Reset your email">
                </div>
            </div>
        </div>
    </div>
</template>

<script>
import firebase from "firebase";
/* eslint-disable */
export default {
  data() {
    return {
      email: "",
      password: "",
      isHidden: true
    };
  },
  methods: {
    login(e) {
      firebase.auth().signInWithEmailAndPassword(this.email, this.password)
        .then(user => {
          alert('You are logged in as ' + this.email);
          this.$router.push('/index');
          location.reload();
        },
        err => {
          alert(err.message);
        })
      e.preventDefault();
    },
    resetPassword() {
      const auth = firebase.auth();
      auth.sendPasswordResetEmail(auth.currentUser.email).then(() => {
        console.log('Email send');
        // Email sent.
      }).catch((error) => {
        // An error happened.
        console.log(error);
      });
    },
    resetEmail() {
      const auth = firebase.auth();
      auth.updateEmail(this.email).then(() => {
        console.log('Email changed');
        // Email sent.
      }).catch((error) => {
        // An error happened.
        console.log(error);
      });
    }
  }
};
</script>

При запуске я получаю эту ошибку:

Uncaught TypeError: auth.updateEmail is not a function
    at VueComponent.resetEmail (Profile.vue?5a88:64)
    at invoker (vue.runtime.esm.js?2b0e:2023)
    at HTMLInputElement.fn._withTask.fn._withTask (vue.runtime.esm.js?2b0e:1822)

Что я делаю не так, потому что я читаю Firebase do c и проверяю в Google, но я делаю что-то не так.

1 Ответ

0 голосов
/ 10 марта 2020

Метод updateEmail() - это не метод "root" Firebase Служба аутентификации , а метод User.

Итак, вы должны сделать что-то вроде следующего:

const auth = firebase.auth();
auth.currentUser.updateEmail(this.email).then(() => {...});
...