AngularFire2 是否支持更新用户凭据?

Does AngularFire2 support update of user credentials?

我正在结合使用 AngularFire2 (2.0.0-beta.2) 和 angular2 (2.0.0-rc.4)。使用 Angularfire 我可以通过编程方式创建一个用户 (email/password)

angularFire.auth.createUser({email : this.email, password; this.password})

该部分按预期工作。随后,我想更新电子邮件地址或密码。我已经检查了 AngularFire 源,但似乎没有执行此操作的机制。我的评估是否正确?如果我是对的,我应该期望在即将发布的版本中看到一种机制,还是应该只使用本机 Firebase 机制?

您希望使用 $firebaseAuth()。只需将其注入您的控制器并使用

$firebaseAuth().$updateEmail("email@email.com");
$firebaseAuth().$updatePassword("newpass123");

我将尝试回答我自己的问题。我认为 AngularFire2 public API 缺少一些与 firebase 身份验证相关的功能。例如,我认为当前版本的 AngularFire (2.0.0-beta2) 无法更新电子邮件地址或密码,或发送密码重置电子邮件。我认为解决目前这个缺点的方法是获取原生的 firebase objet 并使用原生的 firebase 方法来解决。但是,我一直无法弄清楚如何使用 AngularFire2 访问本机 FireBase 对象。我已经发布了 this 个问题,看看是否有人可以帮助我做到这一点。

我认为我的回答会有所帮助,密码 可以通过 firebase-admin 使用云功能更改,您只需通过来自客户端的电子邮件新密码(Angular,ionic,...)

云函数:

import * as functions from 'firebase-functions';

import * as admin from 'firebase-admin';
const cors = require('cors')({ origin: true });

export const resetUserPassword = functions.https.onRequest( async (req, res) => {

return cors( req, res, async () => {
    const email = req.body.data.email;
    const password = req.body.data.password;

    admin.auth().getUserByEmail(email)
    .then((getUserRecord) => {
      admin.auth().updateUser(getUserRecord.uid, {
        email,
        password
      })
      .then(function(userRecord) {
        res.send({
          status: 200,
          data: userRecord
        })
      })
      .catch(function(error) {
        res.send({
          status: 500,
          data: error
        })
      });
    })
    .catch((error) => {
      console.log('Error fetching user data:', error);
    });
  })
});

客户端代码(IONIC):

import { AngularFireFunctions } from '@angular/fire/functions';
export class AuthService {
constructor(
 private functions: AngularFireFunctions
) {}
  resetUserPassword() {
    const userNewCredential = {email: 'user-email', password: 'your-new-password'};
    this.functions.httpsCallable('resetUserPassword') 
    (userNewCredential).toPromise().then((updatedUser) => {
      console.log(updatedUser);
    }).catch((error) => console.log(error));
 }