Поддерживает ли 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?


person Rob Gorman    schedule 09.07.2016    source источник


Ответы (3)


Вы хотите использовать $firebaseAuth(). Просто введите его в свой контроллер и используйте

$firebaseAuth().$updateEmail("[email protected]");
$firebaseAuth().$updatePassword("newpass123");
person adolfosrs    schedule 09.07.2016
comment
Это не работает с angular2. В angular 2 (начиная с 2.0.0-rc.4) методы angularfire.auth представляют собой различные перегруженные версии login, logout, getAuth() и createUser(). Я думаю, что предложенное вами решение работает в предыдущих версиях FB, но не в 2.0. - person Rob Gorman; 11.07.2016

Я думаю, что мой ответ будет полезен, пароль может быть изменен с помощью 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));
 }
person Saad Qamar    schedule 31.07.2019

Я собираюсь попробовать ответить на свой вопрос. Я думаю, что в общедоступном API AngularFire2 отсутствуют некоторые функции, связанные с аутентификацией firebase. Например, я не думаю, что текущая версия AngularFire (2.0.0-beta2) имеет возможность обновить адрес электронной почты или пароль или отправить электронное письмо для сброса пароля. Я думаю, что решение этого существующего недостатка состоит в том, чтобы получить собственный объект firebase и просто использовать собственные методы firebase для решения. Однако я не смог понять, как получить доступ к собственному объекту FireBase с помощью AngularFire2. Я разместил этот вопрос, чтобы узнать, может ли кто-нибудь помочь мне в этом. .

person Rob Gorman    schedule 11.07.2016