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

时间:2016-07-09 16:52:02

标签: firebase firebase-authentication angularfire2

我使用AngularFire2(2.0.0-beta.2)与angular2(2.0.0-rc.4)组合。使用Angularfire我可以使用

以编程方式创建用户(电子邮件/密码)
angularFire.auth.createUser({email : this.email, password; this.password})

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

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

我认为我的答案会有所帮助, firebase-admin 可以使用云功能更改密码,而您只需传递电子邮件和来自客户端(角度,离子,...)的新密码

云功能:

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));
 }

答案 2 :(得分:0)

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