Firebase当前用户更新电话号码

时间:2019-12-09 16:02:09

标签: javascript firebase firebase-authentication

我正在使用Firebase Auth,并且我有一个包含两个字段的表单,名称和电话号码以及onsubmit方法,并且我想更新当前登录用户的电话号码和名称。但它不会在提交时更新电话号码。仅成功更新用户的显示名称。请检查下面的代码。 onUpdateProfile是表单提交功能。

<template>
  <form @submit.prevent="onUpdateProfile">
    <input type="text" v-model="profile.name" placeholder="Enter Your Name..." />
    <input type="text" v-model="profile.phonenumber" placeholder="Enter Your phone..." />
    <button  type="submit">submit</button>
  </form>
</template>

    methods: {
      onUpdateProfile() {
              firebase.auth().onAuthStateChanged(user => {
                if (user) {
                  //Getting Current User
                  let user = firebase.auth().currentUser;
                  user
                    .updateProfile({
                      displayName: this.profile.name,
                      phoneNumber: this.profile.phoneNumber
                    })
                    .then(() => {console.log('success})
                    .catch(error => {console.log(error});
                  //Updating User other details on submit
                } else {
                }
              });
            }
    }


    data() {
        return {
          profile: {
            name: "",
            phonenumber: ""
          }
        };
      }

3 个答案:

答案 0 :(得分:0)

更新

根据Firebase文档,看起来只有使用firebase-admin才能更新电话号码。没有它,您只能更新基本信息,例如用户的显示名称和个人资料照片URL。

如果我错了,请随时纠正我。

https://firebase.google.com/docs/auth/admin/manage-users#update_a_user

https://firebase.google.com/docs/auth/web/manage-users#update_a_users_profile


您使用的是不同的名称;

在模板中您有以下内容:

v-model="profile.phonenumber"

和onUpdateProfile()方法中

phoneNumber: this.profile.phoneNumber

答案 1 :(得分:0)

您无法使用updateProfile更新phoneNumber。您必须使用updatePhoneNumber API,因为Firebase Auth始终要求先验证电话号码,然后才能将其保存在用户上。

这类似于signInWithPhoneNumber

const phoneNumber = getPhoneNumberFromUserInput();
const appVerifier = new firebase.auth.RecaptchaVerifier(...);
firebase.auth().currentUser.updatePhoneNumber(phoneNumber, appVerifier)
  .then((confirmationResult) => {
    // SMS sent. Prompt user to type the code from the message, then complete
    // verification by calling confirmationResult.confirm(code).
    ...
    return confirmationResult.confirm(smsCode);
  }).then((userCredential) => {
    // Phone set on the user.
  }).catch((error) => {
    // Error occurred.
  });

答案 2 :(得分:0)

这对我有用:

async function save(phone: string, e) {
    e.preventDefault();
    const { currentUser:fuser } = firebase.auth();
    if(fuser && fuser.phoneNumber !== phone) {
        try {
            const verifier = new firebase.auth.RecaptchaVerifier('recaptcha-container', {
                callback: (response) => console.log('callback', response),
                size: 'invisible',
            });
            const phoneProvider = new firebase.auth.PhoneAuthProvider();
            const id = await phoneProvider.verifyPhoneNumber(phone, verifier);
            const code = window.prompt('Bitte zugeschickten Code eingeben');
            const cred = firebase.auth.PhoneAuthProvider.credential(id, code);
            await fuser.updatePhoneNumber(cred);
            console.log('phone number changed', id, cred, fuser);
            setSuccess(true);
        } catch(e) {
            console.error(e);
        }
    }
}